首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java到Node.js AES/ECB/Java 5加密

Java到Node.js AES/ECB/Java 5加密
EN

Stack Overflow用户
提问于 2020-01-20 05:13:00
回答 1查看 3.5K关注 0票数 1

我在JAVA中有以下加密函数。我正试图用密码(从密码)在Node.js中编写同样的加密。但是,输出是不一样的。它使用相同的键和输入。

JAVA

代码语言:javascript
复制
public static String encrypt(String input, String key) {
    byte[] crypted = null;
    try {
        SecretKeySpec skey = new SecretKeySpec(key.getBytes(), "AES");
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, skey);
        crypted = cipher.doFinal(input.getBytes());
    } catch (Exception e) {
        System.out.println(e.toString());
    }
    String result = new String(Base64.encodeBase64(crypted));
    return result.replace("+", "-");
}

样本输出:0HCkcjWj/PoCZ4ZUFJARs/m4kpuffk8dQnT0uNhog=(44个字符)

Node.js

代码语言:javascript
复制
encrypt = (input, key) => { 
    const algorithm = 'aes-128-cbc';   
    key = crypto.scryptSync(key, 'salt', 16);       
    const iv = Buffer.alloc(16, 0);
    const cipher = crypto.createCipheriv(algorithm, key, iv);
    cipher.setAutoPadding(true);
    let encrypted = cipher.update(input, 'utf8', 'base64');
    encrypted += cipher.final('base64');
    return encrypted.replace('+','-');
}

示例输出: ZHtEbAhrIo7vWOjdMNgW6Q== (24个字符)

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-01-20 08:26:21

因此,NodeJS代码在功能上与NodeJS代码中的Java代码相同:

  • 必须使用欧洲央行模式而不是CBC模式: const算法= 'aes-128-ecb';. //const iv = Buffer.alloc(16,0);//删除密码=crypto.createCipheriv(算法,键,null); 但是,请注意,欧洲央行不使用IV,通常是不安全的,因此不应该使用[1]。更好的选择是CBC模式(机密性)或GCM模式(机密性、真实性/完整性),[2]((CBC%29)[3] )。
  • 不能应用密钥派生函数[4],即必须删除以下行: key = crypto.scryptSync(key,'salt',16);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59817296

复制
相关文章

相似问题

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