Articles of 密码学

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 。 我错过了什么吗? 谢谢。

Amazon S3 POST API以及使用NodeJS签署策略

我试图build立一个允许用户从NodeJS支持的网站直接上传文件到我的Amazon S3存储桶的内置程序。 这里似乎只有教程,除了实际的亚马逊文件,这是非常过时的。 我一直在关注这个教程 ,获取基本的信息,但是它又是过时的。 它没有方法调用crypto正确,因为它试图传递一个原始的JavaScript对象的update方法,由于它不是一个string或缓冲区抛出一个错误。 我也一直在看knox npm包的源代码。 它没有内置的POST支持 – 我完全理解,因为它是浏览器一旦拥有正确的字段就进行POST。 诺克斯似乎有正确的代码来签署一个政策,我试图让我的代码基于这个工作…但再次无济于事。 这是我为了代码而想出来的。 它产生一个base64编码策略,它创build一个签名…但是当我尝试做一个file upload的时候,它是根据Amazon的错误签名。 var crypto = require("crypto"); var config = require("../../amazonConfig.json"); exports.createS3Policy = function(callback) { var date = new Date(); var s3Policy = { "expiration": "2014-12-01T12:00:00.000Z", "conditions": [ {"acl": "public-read"}, ["content-length-range", 0, 2147483648], {"bucket": "signalleaf"}, ["starts-with", "$Cache-Control", ""], ["starts-with", "$Content-Type", ""], ["starts-with", "$Content-Disposition", […]

NodeJS:bcrypt与原生密码

有人能指出两者之间的差异,以及各自使用的示例情况吗? bcrypt看起来不错。