java cryptojs_使用cryptojs的Java到JS和JS到Java的加密

几个星期前我上了这篇文章并完美地工作:

Compatible AES algorithm for Java and Javascript

现在,我需要进行相反的操作,但是在java中,我得到了这个异常:

javax.crypto.BadPaddingException: Given final block not properly padded

at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:966)

at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:824)

at com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:436)

at javax.crypto.Cipher.doFinal(Cipher.java:2165)

这是我在JavaScript中执行的“反向”操作:

var rkEncryptionKey = CryptoJS.enc.Base64.parse('u/Gu5posvwDsXUnV5Zaq4g==');

var rkEncryptionIv = CryptoJS.enc.Base64.parse('5D9r9ZVzEYYgha93/aUK2w==');

function encryptString(stringToEncrypt) {

var utf8Stringified = CryptoJS.enc.Utf8.parse(stringToEncrypt);

var encrypted = CryptoJS.AES.encrypt(utf8Stringified.toString(), rkEncryptionKey, {mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7, iv: rkEncryptionIv});

return CryptoJS.enc.Base64.parse(encrypted.toString()).toString();

}

我虽然这将是全部?

[编辑]

加密字符串如下:{“company_name”:“asdfasdfasd”,“customer_name”:“asdfasdfasdfasdf”,“phone_number”:“asdfasdfasdfasdf”,“email”:“asdfasdfasdfasdfads”}

当从java到java进行加密/解密时,它可以工作,当从java到javascript这样做时,也可以工作,但是从javascript到java,不能正常工作.

Java代码

public String toJson(final String encrypted) {

try {

SecretKey key = new SecretKeySpec(Base64.decodeBase64("u/Gu5posvwDsXUnV5Zaq4g=="), "AES");

AlgorithmParameterSpec iv = new IvParameterSpec(Base64.decodeBase64("5D9r9ZVzEYYgha93/aUK2w=="));

byte[] decodeBase64 = Base64.decodeBase64(encrypted);

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

cipher.init(Cipher.DECRYPT_MODE, key, iv);

return new String(cipher.doFinal(decodeBase64), "UTF-8");

} catch (Exception e) {

throw new RuntimeException("This should not happen in production.", e);

}

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值