我正在尝试使用cryptojs实现AES / ECB / NoPadding。
在Java方面我有这个:
public static String encrypt(String input, String key) throws Exception {
SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
return DatatypeConverter.printHexBinary(cipher.doFinal(padToMultipleOf32(input.getBytes())));
}
public static byte[] padToMultipleOf32(final byte[] bytes) {
int n16 = ((bytes.length + 31) / 32);
int paddedLen = n16 * 32;
byte[] result = new byte[paddedLen];
for (int i = 0; i < bytes.length; i++) {
result[i] = bytes[i];
}
for (int i = bytes.length; i < paddedLen; i++) {
result[i] = 0x00;
}
System.out.println(new String(result).length());
return result;
}
运行Test.encrypt(&#34; test&#34;,&#34; 4g2ef21zmmmhe678&#34;) 给我:C24F53DDEAD357510A27AA283C74BBF4638B3F81F8EB44652D424D7C32897525
我如何在cryptojs中做同样的事情,我目前无法工作:
var pwd = CryptoJS.AES.encrypt("test", "4g2ef21zmmmhe678", {
mode : CryptoJS.mode.ECB,
padding : CryptoJS.pad.NoPadding
});
expect(pwd.ciphertext.toString(CryptoJS.enc.Base64)).toEqual("C24F53DDEAD357510A27AA283C74BBF4638B3F81F8EB44652D424D7C32897525");
请帮忙
答案 0 :(得分:0)
CryptoJS 的文档说,当将普通密码(即字符串)传递给encrypt ()
时,它会自动生成256位密钥(Java实现128位版本)那个密码作为种子。
要防止您使用此功能直接将密码转换为密钥:
var key = CryptoJS.enc.Utf8.parse("password");
您可能还必须同步密文的编码。有关如何使用Java和 CryptoJS 执行可互操作加密的详细示例,请参阅here。