获取错误“;数据对于密钥大小来说太大”;使用Crypto Node.js
Getting error "data too large for key size" with Crypto Node.js
当我这样做时,我得到错误"Error: error:0406C06E:rsa routines:RSA_padding_add_PKCS1_type_1:data too large for key size"
:
var crypto = require('crypto');
var fs = require('fs');
var first_keys = {
public_key: fs.readFileSync('tests/public.key'),
private_key: fs.readFileSync('tests/private.key')
}
var first_result = crypto.privateEncrypt({
key: first_keys.private_key
}, new Buffer("Hello World!"));
var second_result = crypto.privateEncrypt({
key: first_keys.private_key
}, first_result);
var second_plaintext = crypto.publicDecrypt({
key: first_keys.public_key
}, second_result);
var first_plaintext = crypto.publicDecrypt({
key: first_keys.public_key
}, second_plaintext);
if(first_plaintext == new Buffer("Hello World!"))
console.log("Hello World!");
我知道这很奇怪,但我正在创建一个过程,该过程需要进行n次迭代(对n个密钥进行私有加密,对n个关键字进行公共解密)。我使用一把钥匙进行测试。
RSA通过进行模幂运算来工作。这意味着,任何加密的东西通常都会有与模数(两个素数的乘积)一样多的比特。
RSA需要一个安全的填充方案。node.js中默认为RSA_PKCS1_OAEP_PADDING
。这种填充方案在加密前为明文添加了42个字节,但现在新明文(first_result
)大于模数,无法以可恢复的方式加密。
你有两个选择:
- 使用混合加密或
- 为以后的迭代禁用填充
让我们尝试禁用填充:
var first_result = crypto.privateEncrypt({
key: first_keys.private_key
}, new Buffer("Hello World!"));
var second_result = crypto.privateEncrypt({
key: first_keys.private_key,
padding: constants.RSA_NO_PADDING
}, first_result);
var second_plaintext = crypto.publicDecrypt({
key: first_keys.public_key,
padding: constants.RSA_NO_PADDING
}, second_result);
var first_plaintext = crypto.publicDecrypt({
key: first_keys.public_key
}, second_plaintext);
相关文章:
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 使用JS将数组转换为json对象
- 如何使用js将SNAPSHOT内部版本号转换为3位数的整数
- 使用 js 将背景图像设置为 HTML
- 使用JS查找数组的平均值
- 如何使用JS/nightwatchjs并行运行多个测试
- 使用JS在服务器上运行PHP脚本
- 使用JS函数来使用另一个函数的语法?node.js
- 如何使用JS禁用表行,并在MYSQL中插入所选选项
- 为什么可以't PHP查找可以使用JS或jQuery访问的元素
- 如何使用js自动登录
- 使用JS/NodeJS测试并读取文件中的变量
- 使用js或extjs访问对象的java列表
- 使用JS加载HTML元素
- 使用JS和PHP通过锚标记传递值
- 使用JS从选择和文本输入中捕获值,并将输出返回到HTML
- 使用JS和JQuery播放和停止声音
- 使用JS按顺序显示图像,而不是随机显示
- 使用js/jQuery检查对象(而不是元素)是否真的存在
- 如何使用JS/jQuery在另一个网站上显示iframe中的特定内容