Tag: 密码学

将AES Java解密代码移植到Node.js

我有我想要移植到Node.js的以下Java代码: // Java byte[] rawKey = "deadbeefdeadbeef".getBytes("us-ascii"); SecretKeySpec skeySpec = new SecretKeySpec(rawKey, "AES"); Cipher cip = Cipher.getInstance("AES/ECB/NoPadding"); cip.init(Cipher.DECRYPT_MODE, skeySpec); byte[] plaintext = cip.doFinal(ciphertext, 0, ciphertext.length); 这是我使用stream的Node.js的尝试 // JS, using the crypto streams API var decipher = crypto.createDecipher('aes-128-ecb', 'deadbeefdeadbeef'); decipher.setAutoPadding(false); decipher.pipe(concat(function(plaintext) { console.log(plaintext); }); decipher.end(ciphertext); 而且,Node.js也尝试使用旧的.update()和.final() API: // JS, using the `.update()` and `.final()` API var […]

encryption与bcrypt有什么区别?

这些模块是必需的 const crypto = require('crypto'); const bcrypt = require('bcrypt'); 他们之间我很困惑。 我想知道它们之间有什么区别,什么时候应该使用。

非对称数字签名Node.JS

我需要find一些criptographic解决scheme,它允许我使用私钥签署一些数据,并使用公钥检查签名。 如果有一些nodejs包,会很棒。 谢谢!

Node.js – 如何使用crypto.randomBytes在特定范围内生成随机数字

如何使用crypto.randomBytes在特定范围内生成随机数字? 我想能够生成一个像这样的随机数字: console.log(random(55, 956)); // where 55 is minimum and 956 is maximum 而且我仅限于在随机函数内部使用crypto.randomBytes来为此范围生成随机数。 我知道如何将生成的字节从randomBytes转换为hex或十进制,但我不知道如何从math上随机字节的特定范围内获得一个随机数。

GitHub Webhook秘密从不validation

我正在使用GitHub webhook将事件传递给我的应用程序(GitHub的Hubot的一个实例),并使用sha1秘密进行保护。 我正在使用下面的代码来validation传入webhooks上的散列 crypto = require('crypto') signature = "sha1=" + crypto.createHmac('sha1', process.env.HUBOT_GITHUB_SECRET).update( new Buffer request.body ).digest('hex') unless request.headers['x-hub-signature'] is signature response.send "Signature not valid" return 在webhook中通过的X-Hub-Signature头看起来像这样 X-Hub-Signature:sha1 = 1cffc5d4c77a3f696ecd9c19dbc2575d22ffebd4 我按照GitHub的文档准确地传递了密钥和数据,但散列总是不一样。 这是GitHub的文档。 https://developer.github.com/v3/repos/hooks/#example 这是我最有可能误解的部分 secret:作为X-Hub-Signature标头与HTTP请求一起传递的可选string。 这个头部的值是作为身体的HMAChex摘要计算的,使用秘密作为密钥。 任何人都可以看到我要去哪里错了?

尝试使用私钥解密邮件时出现节点rsa错误

所以我一直试图使用node -rsa和jsencrypt的 javascript来创build一个网站(为一个任务),其中JavaScript客户端获取由服务器生成的公钥(node-rsa),encryption消息(jsencrypt)用户已经进入,将其发送到服务器并获取服务器解密(node-rsa)。 密钥的生成工作,encryption工作,但解密没有。 当我启动节点脚本,我做了以下encryption… var NodeRSA = require('node-rsa'); var myDecrypter = new NodeRSA({b: 512}); 当客户端请求密钥(我使用快速)时,运行以下内容。 app.get('/getPublicKey', function(req, res){ var publicKeyJson = {"Key": ""}; console.log(myDecrypter.exportKey('public')); publicKeyJson.Key = myDecrypter.exportKey('public'); res.json(JSON.stringify(publicKeyJson)); }); 客户端然后像这样保存这个键… var myEncrypter = new JSEncrypt(); var myJson = ""; $.getJSON( "getPublicKey", function( data ) { myJson = JSON.parse(data).Key; setKey(); }); function setKey() { myEncrypter.setPublicKey(myJson); […]

在Node.js中$ 2y bcrypt哈希

我正在处理与$2y哈希旧数据库。 我已经深入了解了这一点,还偶然发现了 $2a和$2y之间的差异。 我查看了bcrypt的节点模块,它似乎生成并比较了只有$2a哈希值。 https://github.com/ncb000gt/node.bcrypt.js/issues/175 https://github.com/ncb000gt/node.bcrypt.js/issues/349 https://github.com/ncb000gt/node.bcrypt.js/issues/213 我发现一个网站,生成$2y哈希,所以我可以testing他们与bcrypt 。 http://aspirine.org/htpasswd_en.html 以下是stringhelloworld的$2y哈希示例。 helloworld:$2y$10$tRM7x9gGKhcAmpeqKEdhj.qRWCr4qoV1FU9se0Crx2hkMVNL2ktEW 似乎模块无法validation$2y哈希值。 这是我的testing。 var Promise = require('bluebird') var bcrypt = require('bcrypt') var string = 'helloworld' Promise.promisifyAll(bcrypt) // bcrypt.genSalt(10, function(err, salt) { // bcrypt.hash(string, salt, function(err, hash) { // console.log(hash) // }) // }) var hashesGeneratedUsingBcryptModule = [ '$2a$10$6ppmIdlNEPwxWJskPaQ7l.d2fblh.GO6JomzrcpiD/hxGPOXA3Bsq', '$2a$10$YmpoYCDHzdAPMbd9B8l48.hkSnylnAPbOym367FKIEPa0ixY.o4b.', '$2a$10$Xfy3OPurrZEmbmmO0x1wGuFMdRTlmOgEMS0geg4wTj1vKcvXXjk06', '$2a$10$mYgwmdPZjiEncp7Yh5UB1uyPkoyavxrYcOIzzY4mzSniGpI9RbhL.', '$2a$10$dkBVTe2A2DAn24PUq1GZYe7AqL8WQqwOi8ZWBJAauOg60sk44DkOC' ] var […]

升级到NodeJS后密钥长度无效6

以下用于encryption和解密对我们的支付网关服务的请求的代码在Node Js 5.7.0中正常工作 function Encrypt(plainText, workingKey) { var m = crypto.createHash('md5'); m.update(workingKey); var key = m.digest('binary'); var iv = '\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f'; var cipher = crypto.createCipheriv('aes-128-cbc', key, iv); var encoded = cipher.update(plainText, 'utf8', 'hex'); encoded += cipher.final('hex'); return encoded; }; function Decrypt(encText, workingKey) { var m = crypto.createHash('md5'); m.update(workingKey) var key = m.digest('binary'); var iv = '\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f'; […]

像维基百科上所说的那样实现LLLalgorithm,但却陷入严重的问题

我不确定我的问题与编程有关,或与LLLalgorithm的概念有关,以及维基百科上提及的内容。 我决定实施LLLalgorithm,因为它已经写在维基百科上 (逐行/逐行)实际学习algorithm,并确保它是真正的工作,但我得到意想不到或无效的结果。 所以,我使用JavaScript(编程语言)和node.js(JavaScript引擎)来实现它, 这是获取完整代码的git存储库 。 长话短说,K的值超出范围,例如当我们只有3个向量(数组大小为3,因此索引的最大值将是2)时,K的值将超出范围,但是k变为3并且是无意义的。 我的代码是维基百科上提到的algorithm的一步一步(逐行)实现,我所做的只是实现它。 所以我不是什么问题。 // ** important // {b} set of vectors are denoted by this.matrix_before // {b*} set of vectors are denoted by this.matrix_after calculate_LLL() { this.matrix_after = new gs(this.matrix_before, false).matrix; // initialize after vectors: perform Gram-Schmidt, but do not normalize var flag = false; // invariant var k […]

nodejsencryption解密有什么问题?

我有以下encryption的数据: U2FsdGVkX1+21O5RB08bavFTq7Yq/gChmXrO3f00tvJaT55A5pPvqw0zFVnHSW1o 解密它的password是: password (这是来自乱码的例子) 在使用openssl的命令行中: echo "U2FsdGVkX1+21O5RB08bavFTq7Yq/gChmXrO3f00tvJaT55A5pPvqw0zFVnHSW1o" | openssl enc -d -aes-256-cbc -a -k password 输出是: Made with Gibberish\n 用我的NodeJS应用程序: var decipher = crypto.createDecipher('aes-256-cbc', "password"); var dec = decipher.update("U2FsdGVkX1+21O5RB08bavFTq7Yq/gChmXrO3f00tvJaT55A5pPvqw0zFVnHSW1o", 'base64', 'utf8'); dec += decipher.final('utf8'); 我有以下错误TypeError: DecipherFinal fail在decipher.final行TypeError: DecipherFinal fail 。 我错过了什么吗? 谢谢。