我正在尝试使用服务器团队提供的密钥库连接到服务器.
在首先向服务器发送服务调用时,我使用以下api创建了KeyStore实例
KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
Run Code Online (Sandbox Code Playgroud)
它将密钥库类型返回为"BKS".
服务器团队发送的密钥库类型为".jks"(somename.jks)因此,我得到异常"密钥存储的错误版本".
我尝试通过以下方式将"JKS"传递给KeyStore的getInstance()
KeyStore keystore = KeyStore.getInstance("JKS");
Run Code Online (Sandbox Code Playgroud)
但在这里,我得到了异常"未发现KeyStore JKS实现".
这是一段代码:
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
InputStream instream = mContext.getAssets().open("somename.jks");
try {
trustStore.load(instream, "password".toCharArray());
} finally {
try {
instream.close();
} catch(Exception ignore) {
}
}
Run Code Online (Sandbox Code Playgroud)
请指导我解决这个问题.
每次重新安装我的日蚀时,我都会收到以下异常.每次我重新安装当前位于前台的应用程序时都会发生这种情况.
我希望这个错误只发生在开发期间,因为我通过Eclipse卸载正在运行的应用程序.
有没有人在用户手机上看到此错误?
当我转向使用ICS的Galaxy Nexus时,这开始发生在我身上.
02-22 11:31:07.098: E/AndroidRuntime(479): FATAL EXCEPTION: main
02-22 11:31:07.098: E/AndroidRuntime(479): java.lang.RuntimeException: Unable to instantiate application android.app.Application: java.lang.NullPointerException
02-22 11:31:07.098: E/AndroidRuntime(479): at android.app.LoadedApk.makeApplication(LoadedApk.java:466)
02-22 11:31:07.098: E/AndroidRuntime(479): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3260)
02-22 11:31:07.098: E/AndroidRuntime(479): at android.app.ActivityThread.access$2200(ActivityThread.java:117)
02-22 11:31:07.098: E/AndroidRuntime(479): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:969)
02-22 11:31:07.098: E/AndroidRuntime(479): at android.os.Handler.dispatchMessage(Handler.java:99)
02-22 11:31:07.098: E/AndroidRuntime(479): at android.os.Looper.loop(Looper.java:123)
02-22 11:31:07.098: E/AndroidRuntime(479): at android.app.ActivityThread.main(ActivityThread.java:3683)
02-22 11:31:07.098: E/AndroidRuntime(479): at java.lang.reflect.Method.invokeNative(Native Method)
02-22 11:31:07.098: E/AndroidRuntime(479): at java.lang.reflect.Method.invoke(Method.java:507)
02-22 11:31:07.098: E/AndroidRuntime(479): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
02-22 11:31:07.098: E/AndroidRuntime(479): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
02-22 11:31:07.098: E/AndroidRuntime(479): …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用带有.bks密钥库的"https"方案连接到服务器,但由于此问题我无法连接.
任何人都可以告诉我这是什么原因以及如何解决这个问题.
这是我的代码
public String httpRestGetCallwithCertificate(String url, String payLoad) {
String result = null;
DefaultHttpClient httpClient = null;
KeyStore trustStore = null;
try {
httpClient = new DefaultHttpClient(getHttpParams());
HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;
HttpHost targetHost = new HttpHost("hostname","portno","https");
httpClient.getCredentialsProvider().setCredentials(
new AuthScope(targetHost.getHostName(), targetHost.getPort()),
new UsernamePasswordCredentials("username","password"));
trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
InputStream instream = mContext.getResources().openRawResource(R.raw.truststore);
try {
trustStore.load(instream, "password".toCharArray());
} finally {
try { instream.close(); } catch (Exception ignore) {}
}
SchemeRegistry registry = new SchemeRegistry();
SSLSocketFactory socketFactory = new SSLSocketFactory(trustStore);
socketFactory.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier); …Run Code Online (Sandbox Code Playgroud) 我的应用程序中有一个Activity(MainActivity),并且有一个静态快捷方式(指向TempActivity)。
由于静态快捷方式将始终具有FLAG_ACTIVITY_NEW_TASK和FLAG_ACTIVITY_CLEAR_TASK设置,因此我创建了TempActivity,这是一个不可见的Activity,即它将启动MainActivity,然后调用finish()。而且,如开发人员文档中所建议,SecondActivity 在应用程序的AndroidManifest.xml文件中具有android:taskAffinity =“”。
MainActivity具有android:launchMode =“ singleTop”
即使执行了此操作,MainActivity仍会在新任务中启动,而不是在从主屏幕启动时创建的现有任务中启动。
AndroidManifest.xml
<activity
android:name=".MainActivity"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data
android:name="android.app.shortcuts"
android:resource="@xml/shortcuts" />
</activity>
<activity android:name=".TempActivity" android:taskAffinity=""></activity>
Run Code Online (Sandbox Code Playgroud)
捷径
<shortcut
android:enabled="true"
android:icon="@drawable/icon"
android:shortcutDisabledMessage="@string/app_name"
android:shortcutId="static"
android:shortcutLongLabel="@string/app_name"
android:shortcutShortLabel="@string/app_name">
<intent
android:action="custom"
android:targetClass="com.example.mobile.appshortcut.TempActivity"
android:targetPackage="com.example.mobile.appshortcut" />
</shortcut>
Run Code Online (Sandbox Code Playgroud)
TempActivity.java
public class TempActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main2);
//Intent intent = getIntent(); // From Shortcut
Intent intent = new Intent(); // For Testing
intent.setClass(this,MainActivity.class);
startActivity(intent);
finish();
}
@Override
protected void …Run Code Online (Sandbox Code Playgroud) 我需要在对话框中删除标题.注意我不需要一个空白的标题.我需要删除标题部分.以下是我的代码:
final Dialog dialog1=new Dialog(context);
dialog1.setContentView(R.layout.redeemvoucher_first);
dialog1.setCanceledOnTouchOutside(true);
dialog1.getWindow().setLayout(900,500);
dialog1.show();
Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我想通过加密来存储一些安全数据.当用户希望我需要通过解密来向他显示它.这工作正常.但问题是我需要为每条消息存储加密消息和初始化向量.这个初始化向量是在加密时生成的,我必须在解密时使用它来获取原始消息.
因此,如果用户存储1000条消息,我需要存储这1000条加密消息和相应的1000条初始化向量.我想避免为每条消息存储初始化向量.
请告诉我使用初始化矢量进行AES-256加密的方法.
下面是我的加密和解密代码
/*
* This method will do the AES-256 encryption.
*/
private byte[] encrypt(char[] raw, String cardno) {
// This raw is some unique key like password.
SecretKeyFactory factory = null;
SecretKey tmp = null;
Cipher cipher = null;
byte[] ciphertext = null;
AlgorithmParameters params = null;
try {
factory = SecretKeyFactory.getInstance("PBEWITHSHA-256AND256BITAES-CBC-BC");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
KeySpec spec = new PBEKeySpec(raw, mSalt, 1024, 256);
try {
if (factory != null)
tmp = factory.generateSecret(spec);
} …Run Code Online (Sandbox Code Playgroud)