Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 解密字节数组后无法转换为字符串_Android_Arrays_Encryption - Fatal编程技术网

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进行解密?现在您的问题是在解密过程中还是在加载密钥时?如果您在加密/解密过程中遇到一些问题(例如,获取解密的字符串与加密的字符串不同),我建议您参阅本教程: