首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(Java to Javascript) Nodejs Crypto Javascript中的javax.crypto.Cipher等效代码

问(Java to Javascript) Nodejs Crypto Javascript中的javax.crypto.Cipher等效代码
EN

Stack Overflow用户
提问于 2019-10-31 18:45:27
回答 1查看 411关注 0票数 1

我正在尝试将下面的java代码转换成nodejs。

代码语言:javascript
复制
    private static String TRANS_MODE = "Blowfish";

    private static String BLOWFISH_KEY = "BLOWFISH_KEY";

    public static String encrypt(String password) throws Exception {

    SecretKeySpec keySpec = new SecretKeySpec(BLOWFISH_KEY.getBytes("Windows-31J"),TRANS_MODE);
    Cipher cipher;
    cipher = Cipher.getInstance(TRANS_MODE);

    cipher.init(Cipher.ENCRYPT_MODE, keySpec);
    byte[] passByte;
    passByte = cipher.doFinal(password.getBytes("Windows-31J"));


    return new String(Hex.encodeHex(passByte));

    }

这就是我能弄清楚的-

代码语言:javascript
复制
const crypto = require('crypto');

function encrypt(password)  
  var fcKey = "BLOWFISH_KEY";
  var cipher = crypto.createCipher('BF-CBC', fcKey, "");
  var encrypted = cipher.update(password,'ascii','hex');
  encrypted += cipher.final('hex');
return encrypted;

我不能得到相同的输出。例如,如果

password= "password01“

Java代码输出- fe0facbf8d458adaa47c5fe430cbc0ad

Nodejs代码输出- ae5e8238c929b5716566e97fa35efb9b

有人能帮我解决这个问题吗??

EN

回答 1

Stack Overflow用户

发布于 2019-10-31 20:33:20

请注意,crypto.createCipher(algorithm, password[, options])已弃用,不应使用。

其中java中的SecretKeySpec(..)接受二进制密钥作为输入,createCipher(..)在js中,接受“密码”作为输入,并在幕后尝试使用MD5派生出一个二进制密钥。所以你在两个程序中使用的实际密钥最终是不同的。js方法还试图从密码派生一个IV,这是一种不好的做法,与java代码不同。

在js中,您需要使用crypto.createCipheriv()。当你这样做的时候,你还需要考虑是否需要一个iv -无论是在Java中还是在js中。

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

https://stackoverflow.com/questions/58641643

复制
相关文章

相似问题

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