Android 解密字节数组后无法转换为字符串
能够加密数据,但解密后无法转换为字符串。没有收到任何错误。解密仅成功,但无法获取正确的字符串值以获取某些已解密的值。下面是代码Android 解密字节数组后无法转换为字符串,android,arrays,encryption,Android,Arrays,Encryption,能够加密数据,但解密后无法转换为字符串。没有收到任何错误。解密仅成功,但无法获取正确的字符串值以获取某些已解密的值。下面是代码 if (MessageVal.contains("encrypt")) { byte[] encrypted =result.getCryptoObject().getCipher().doFinal(message.getBytes()); String newmessage = Base64.encod
if (MessageVal.contains("encrypt")) {
byte[] encrypted =result.getCryptoObject().getCipher().doFinal(message.getBytes());
String newmessage = Base64.encodeToString(encrypted, Base64.URL_SAFE);
SharedPreferences sharedPreferences = PreferenceManager
.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("messageValue", newmessage);
editor.apply();
Intent intent = new Intent(context, sampleAcitvity.class);
context.startActivity(intent);
} else if (MessageVal.contains("decrypt")) {
SharedPreferences sharedPreferences = PreferenceManager
.getDefaultSharedPreferences(context);
String MessageFrm = sharedPreferences.getString("messageValue", null);
Toast.makeText(context, "b4value"+MessageFrm, Toast.LENGTH_LONG).show();
byte[] dataval= Base64.decode(MessageFrm, Base64.URL_SAFE);
byte[] data = result.getCryptoObject().getCipher().doFinal(dataval);
String stringDecryptyedval = new String(data, "UTF-8");
Toast.makeText(context, "sucessfully decrpted"+stringDecryptyedval, Toast.LENGTH_LONG).show();
Intent intent = new Intent(context, sampleAcitvity.class);
context.startActivity(intent);
}
你没有提到你是如何使用初始密码的。我猜你没有正确地初始化密码进行解密。
在加密/解密之前检查密码的初始化。检查密码的算法参数,特别检查操作模式(加密模式/解密模式)。有关更多信息,请参见。根据我的理解,我们需要将result.getCryptoObject().getCipher()传递给encrpt和decraprt函数,以便我们的指纹可以用于加密和解密。如果我错了,请纠正我。public boolean cipherInit(){cipher=cipher.getInstance(KeyProperties.KEY\u ALGORITHM\u AES+“/”+KeyProperties.BLOCK\u MODE\u CBC+“/”+KeyProperties.ENCRYPTION\u PADDING\u PKCS7);keyStore.load(null);Log.e(“ifbb”,“keyStore”);SecretKey key=(SecretKey)keyStore.getKey(key_NAME,null);Log.e(“ifbb”,“SecretKey”+key);cipher.init(cipher.ENCRYPT_MODE,key);return true;}这是我的initcipherso代码,正如您提到的,我只为密码提供ENCRYPT_MODE。那么,如何更改以这种方式尝试的代码,但得到无效的密钥异常KeyStore KeyStore=KeyStore.getInstance(“AndroidKeyStore”);keyStore.load(null);SecretKey SecretKey=(SecretKey)keyStore.getKey(KEY\u NAME,null);Cipher Cipher=Cipher.getInstance(KeyProperties.KEY\u ALGORITHM\u AES+“/”+KeyProperties.BLOCK\u MODE\u CBC+“/”+keyperties.ENCRYPTION\u PADDING\u PKCS7);cipher.init(cipher.DECRYPT_模式,secretKey);byte[]passwordBytes=cipher.doFinal(Base64.decode(MessageFrm,Base64.URL_SAFE));String stringDecryptyedval=新字符串(密码字节,“UTF-8”)@鲁比,我现在很困惑。您是否将代码编辑为init cipher进行解密?现在您的问题是在解密过程中还是在加载密钥时?如果您在加密/解密过程中遇到一些问题(例如,获取解密的字符串与加密的字符串不同),我建议您参阅本教程: