首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不使用加密js的AES解密

不使用加密js的AES解密
EN

Stack Overflow用户
提问于 2018-02-23 10:52:12
回答 1查看 668关注 0票数 0

在我的代码中,我使用crypto.js加密AES加密数据,在java中解密加密的文本。

如果我试图在javascript或java.But中加密和解密,如果我在javascript中加密,并且试图用java解密,则加密和解密都是正确的。

com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:966):给出的最后一个块在javax.crypto.BadPaddingException上没有正确地填充

下面是我的JSCode:

代码语言:javascript
复制
var keyHex = CryptoJS.enc.Utf8.parse('584771624934175587013168');
var iv    = CryptoJS.enc.Hex.parse('000000000000000000000000');
var encrypted = CryptoJS.AES.encrypt('1111', keyHex, {
    iv:iv,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
});
console.log('encryptByAES key: ',encrypted.toString());

下面是我的java代码。

代码语言:javascript
复制
String key = "584771624934175587013168";
String plainText = "1111";
public String encryptTextusingAES(String text, String kek) throws Exception {
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    byte[] keyBytes= new byte[16];
    byte[] b= kek.getBytes("UTF-8");
    int len= b.length;
    if (len> keyBytes.length) len = keyBytes.length;
    System.arraycopy(b, 0, keyBytes, 0, len);
    SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
    IvParameterSpec ivSpec = new IvParameterSpec(keyBytes);
    cipher.init(Cipher.ENCRYPT_MODE,keySpec,ivSpec);
    byte[] results = cipher.doFinal(text.getBytes("UTF-8"));
    BASE64Encoder encoder = new BASE64Encoder();
    return encoder.encode(results);
}

public String decryptTextusingAES(String text, String kek) throws Exception{
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    byte[] keyBytes= new byte[16];
    byte[] b= kek.getBytes("UTF-8");
    int len= b.length;
    if (len> keyBytes.length) len = keyBytes.length;
    System.arraycopy(b, 0, keyBytes, 0, len);
    SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
    IvParameterSpec ivSpec = new IvParameterSpec(keyBytes);
    cipher.init(Cipher.DECRYPT_MODE,keySpec,ivSpec);
    BASE64Decoder decoder = new BASE64Decoder();
    byte [] results = cipher.doFinal(decoder.decodeBuffer(text));
    return new String(results,"UTF-8");
}

How to decrypt correctly any help will be greatly appreciated!!!!
EN

回答 1

Stack Overflow用户

发布于 2018-02-23 11:22:16

当您使用象AES这样的块加密时,需要在加密之前填充输入。有各种标准的方法来做这件事。

在JS代码中,您将指定PKCS-7:

代码语言:javascript
复制
    padding: CryptoJS.pad.Pkcs7

但是在Java代码中,您指定的是PKCS-5:

代码语言:javascript
复制
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

确保您在两边使用相同的填充算法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48946138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档