在节点上生成AES密钥

3

我正在处理一个使用自定义协议加密通信的遗留应用程序。在旧版Java应用程序中,随机生成AES密钥的方法如下:

keygen = KeyGenerator.getInstance("AES");
keygen.init(128);
keygen.generateKey().getEncoded();

我一直在寻找有关加密的解决方案,但没有成功。如何在nodejs上生成此密钥?

1个回答

1
那段代码可能没有您想象的那么强大。它只是生成了16个(128/8)个安全的随机字节,然后在其周围包装了一个密钥对象。所以,在nodejs中,您只需生成16个字节并将原始密钥数据提供给该算法即可。
如果要使用生成的密钥,请确保从“getEncoded()”方法返回的字节创建二进制编码的字符串或缓冲区。如果您需要在整个过程中使密钥成为文本字符串,则可以使用十六进制编码/解码。
有关详细信息,请参见randomBytes()createCipheriv()
AES 密钥只是具有加密强度的随机字节,而 DES(奇偶校验位)和 RSA(质数计算)密钥则不是。

加密密钥不仅仅是随机字节。请参见http://docs.oracle.com/javase/7/docs/api/java/security/SecureRandom.html。 - Jonathan Rosenne
@JonathanRosenne:这怎么比随机更好了? - President James K. Polk
@JonathanRosenne 好的,我已经将其加强为“具有密码学强度”,尽管我在第一段中已经提到了“安全随机”。 - Maarten Bodewes
@MaartenBodewes,我想问一下在Node.js中等价于kgen.init(KEY_SIZE, SecureRandom.getInstance("SHA1PRNG"))的部分是什么,因为randomBytes()只支持字节大小作为参数。 - kenshinji
@kenshinjo,你可能想阅读这个答案 - miradham
@kenshinji 一般来说,在 Java 代码中不应该使用 SecureRandom.getInstance("SHA1PRNG"))。你应该使用 new SecureRandom() 或者为了保护长期密钥,使用 SecureRandom.getInstanceStrong()。然而,最终你只会得到一个随机生成器。只需使用普通的 randomBytes 或任何其他加密安全的随机数生成器即可。 - Maarten Bodewes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接