如何在Nodejs上解密Java AES

编程入门 行业动态 更新时间:2024-10-09 02:29:00

<a href=https://www.elefans.com/category/jswz/34/1771448.html style=如何在Nodejs上解密Java AES"/>

如何在Nodejs上解密Java AES

我在Java上具有以下用于解密AES加密的代码,我需要在Node.js上执行相同的操作

private static SecretKeySpec secretKey;
private static byte[] key;

public static void setKey(String myKey) {
    MessageDigest sha = null;
    try {
        key = myKey.getBytes("UTF-8");
        sha = MessageDigest.getInstance("SHA-1");
        key = sha.digest(key);
        key = Arrays.copyOf(key, 16);
        secretKey = new SecretKeySpec(key, "AES");


    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
}

 public static String decrypt(String strToDecrypt, String secret) 
{
    try
    {
        setKey(secret);
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING");
        cipher.init(Cipher.DECRYPT_MODE, secretKey);
        return new String(cipher.doFinal(Base64.getDecoder().decode(strToDecrypt)));
    } 
    catch (Exception e) 
    {
        System.out.println("Error while decrypting: " + e.toString());
    }
    return null;
}

我曾尝试在以下代码下使用Crypt,但结果却不尽相同

  var aesDecrypt = (text, password, bit) => {
  var decipher = crypto.createDecipheriv('aes-' + bit + '-ecb', password, Buffer.alloc(0));
  decipher.setAutoPadding(false);
  return Buffer.concat([
    decipher.update(text, 'base64'),
    decipher.final()
   ]).toString();
  };

我如何将上述Java代码从上面模仿到Node.js中?

回答如下:

正如James所说,Java代码正在对密码进行哈希处理(并截断)以形成密钥。此外,它[[does使用标准填充。以下用于ASCII数据:

const crypto = require ('crypto'); const mydecrypt = (pw,ctx) => { var h = crypto.createHash('sha1'); h.update(pw,'utf8'); var k = h.digest().slice(0,16); var d = crypto.createDecipheriv('aes-128-ecb', k, Buffer.alloc(0)); return Buffer.concat([d.update(ctx,'base64'), d.final()]) .toString(); } console.log(mydecrypt('password','ks7qtmk7kt5riV/Qyy3glQ==')); -> testdata
可能不适用于非ASCII数据。 Java new String(byte[])使用依赖于JVM的编码,该编码可以是UTF8,也可以是不同的,具体取决于您的平台,内部版本和环境,而您没有描述。 OTOH nodejs Buffer.toString()始终使用UTF8。您可能需要将其更改为toString(somethingelse)以匹配Java。

更多推荐

如何在Nodejs上解密Java AES

本文发布于:2024-05-07 20:31:36,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1757125.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:如何在   Nodejs   AES   Java

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!