【问题标题】:How to implement this encryption related code in JavaScript?如何在 JavaScript 中实现这个加密相关的代码?
【发布时间】:2018-08-16 12:56:33
【问题描述】:

我在 Java 中有以下代码。

        String secretString = 'AAABBBCCC'
        KeyGenerator kgen = KeyGenerator.getInstance("AES");
        SecureRandom securerandom = SecureRandom.getInstance("SHA1PRNG");
        securerandom.setSeed(secretString.getBytes());
        kgen.init(256, securerandom);
        SecretKey secretKey = kgen.generateKey();
        byte[] enCodeFormat = secretKey.getEncoded();
        SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
        Security.addProvider(new BouncyCastleProvider());
        Cipher cipher = Cipher.getInstance("AES");

        cipher.init(Cipher.ENCRYPT_MODE, key);
        byte[] byteContent = content.getBytes("utf-8");
        byte[] cryptograph = cipher.doFinal(byteContent);
        String enc1 = Base64.getEncoder().encodeToString(cryptograph);
        return enc1;

我需要在 JavaScript/Node.js 中实现它,但是我只能在 js 中找出后半部分,如下所示

        'use strict';
        const crypto = require('crypto');
        const ALGORITHM = 'AES-256-ECB';
        const secretString = 'AAABBBCCC'

        // missing part in JS (how to convert secretString to key)

        function encrypt(plaintext, key) {
            const cipher = crypto.createCipheriv(ALGORITHM, key, Buffer.alloc(0));
            return cipher.update(plaintext, 'utf8', 'base64') + cipher.final('base64');
        }

对于前面的Java部分(KeyGenerator生成的secretStringkey),不知道怎么用JavaScript实现,我也不知道 JavaScript 世界中是否有像 KeyGenerator 这样的东西可以帮助我完成繁重的工作。

【问题讨论】:

  • 您是否只是尝试在 JavaScript 中生成密钥?
  • 是的,但是如果我需要像在 Java 中一样获得相同的密钥,我不太明白如何在 JS 中执行此操作。
  • @miradham 是的,它有帮助,但不能完全涵盖我的问题,我已在您发布的链接中添加了评论。谢谢。

标签: javascript java node.js encryption


【解决方案1】:

我想这就是你所追求的:

const crypto = require("crypto-js");


// Encrypt
const ciphertext = crypto.AES.encrypt('SOMETHING SECRET', 'secret key 123');

// Decrypt
const bytes  = crypto.AES.decrypt(ciphertext.toString(), 'secret key 123');
const decryptedData = bytes.toString(crypto.enc.Utf8);

console.log(decryptedData);

https://runkit.com/mswilson4040/5b74f914d4998d0012cccdc0

更新

JavaScript 没有用于密钥生成的本机等效项。答案是创建您自己的或使用第三方模块。对于初学者,我会推荐 uuid 之类的东西。

【讨论】:

  • 感谢您的回答,我认为您误解了我的问题中最重要的部分,即从 KEY 到 key in java code。也许我应该更新我的问题以使其更容易理解。
  • 那么你的问题是如何从 JavaScript 中获取存在于 java 中的值??
  • 不,我不明白如何在 JavaScript 中实现该过程(从 secretString 到 Java 中的密钥)。因为您发布的是我在 JS 代码中所做的。顺便说一句,我更新了我的帖子。
【解决方案2】:

您可以使用crypto.randomBytes()。 根据其文档:

生成加密性强的伪随机数据。 size 参数是一个数字,表示要生成的字节数。

另外,它使用 openssl 的 RAND_bytes API behind scenes

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    • 2014-12-10
    • 1970-01-01
    相关资源
    最近更新 更多