【发布时间】:2020-02-25 12:41:16
【问题描述】:
我在我的 react-native 应用程序中使用 AES 加密,如下所示
import CryptoJS from 'crypto-js' ;
encryptFun() {
var data = "123456";
var key = CryptoJS.enc.Latin1.parse('1234567812345678');
var iv = CryptoJS.enc.Latin1.parse('1234567812345678');
var encrypted = CryptoJS.AES.encrypt(
data,
key,
{iv:iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.ZeroPadding
});
console.log('encrypted: ' + encrypted) ;
var decrypted = CryptoJS.AES.decrypt(encrypted,key,{iv:iv,padding:CryptoJS.pad.ZeroPadding});
console.log('decrypted: '+decrypted.toString(CryptoJS.enc.Utf8));
}
出来=加密:aK7+UX24ttBgfTnAndz9aQ==
以下是我在后端使用 java 获取解密的代码
public static String desEncrypt() throws Exception {
try
{
String data = "aK7+UX24ttBgfTnAndz9aQ==" ;
String key = "1234567812345678";
String iv = "1234567812345678";
byte[] encrypted1 = new BASE64Decoder().decodeBuffer(data);
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");
IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());
cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec);
byte[] original = cipher.doFinal(encrypted1);
String originalString = new String(original);
return originalString;
}
catch (Exception e) {
e.printStackTrace();
return null;
}
}
输出=解密:= 123456[][][][][][][][][][]
Iam 像上面那样输出为 16 位。 我想要的输出应该只有 123456。
【问题讨论】:
-
什么是BASE64Decoder类?
-
旁注:从 java 调用
String::getBytes时,您应该指定编码 - 如果您不这样做,您的解决方案将成为依赖于使用的默认字符集的平台。
标签: javascript java reactjs spring-boot react-native