Tag: sha256

使用按位运算符testingSHA-256摘要的相等性

我正在nodeJS应用程序中实现一个令牌系统,我需要检查两个使用SHA256散列的string是否相等。 我最初的想法是,我可以简单地使用严格的相等运算符( hash1 === hash2 )来testing相等性,因为摘要如果具有相同的input应该产生相同的string。 不过,我已经看到了Paragon Initiative的一篇文章,声称比较每个字符的ascii代码中使用按位运算符的string更安全。 要比较摘要令牌,Paragon代码使用以下代码段(PHP): public static function hash_equals($hash1, $hash2) … $res = 0; $len = \strlen($hash1); for ($i = 0; $i < $len; ++$i) { $res |= \ord($hash1[$i]) ^ \ord($hash2[$i]); } return $res === 0; } 基本上,每个索引处的字符使用按位“异或”,然后使用按位“或”将其保存为标志值。 如果有任何字符不匹配,则差异保存在$res 。 这比使用严格的string比较更有效吗? 哈希摘要只是string,我不知道为什么一个简单的string比较会比明确检查string中的每个单字节有效。 文章编号: https : //paragonie.com/blog/2015/04/secure-authentication-php-with-long-term-persistence Code Ref: https : //github.com/psecio/gatekeeper/blob/7b8ec374e208148692316a34c1b4700d5407ef9b/src […]

从Node中的对象生成一致的sha256哈希

我有一个对象,我想在节点sha256散列。 该对象的内容是简单的Javascripttypes。 举例来说,让我们说: var payload = { "id": "3bab3f00-7d55-11e7-9b0a-4c32759242a5", "foo": "a message", "version": 7, }; 我创build一个像这样的散列: const crypto = require('crypto'); var hash = crypto.createHash('sha256'); hash.update( … ).digest('hex'); 问题是,要传递什么更新? crypto的文档说你可以传递一个<string> | <Buffer> | <TypedArray> | <DataView> <string> | <Buffer> | <TypedArray> | <DataView> <string> | <Buffer> | <TypedArray> | <DataView> ,这似乎表明一个对象是不是一件好事情通过。 我不能使用toString()因为它会打印"[object Object]" 。 我可以使用JSON.stringify,但是我已经在其他地方读过,stringify的输出不能保证对于相同的input是确定性的。 还有其他的select吗? […]

NodeJS crypto.createHmac SHA256无法正常工作

我目前正在试图实现我们正在使用的库的authentication部分,但是我偶然发现了一个奇怪的数据签名问题,NodeJS中crypto.createHmac的输出大约是hash_hmac的一半在PHP中,这是PHP和NodeJS之间数据的唯一部分(我们需要在这里使用NodeJS) 用于在NodeJS中创build签名的确切代码是, authorization["oauth_signature"] = crypto.createHmac('SHA256', process.env.SECRET).update(toSign).digest('base64'); 而对于PHP来说 $authorization["oauth_signature"] = base64_encode(hash_hmac("SHA256", $signatureString . $signingKey, $secret)); 然而,NodeJS版本的输出是 7LkQP+qKR1gSdPq/AgH/3No3ps7EtZXnqwjivMixvM8= 而对于PHP来说 NmQ0MWIzYmJiMjI2YzFlMDhiYzY3NzVmMWY0MzEwNDlhNDU3NDI0ZGJlMzU3NjJhYmMwYjgwYzZjMDE4NDM4OA== 其中有两倍以上的数据 是否必须为NodeJS版本使用不同的库,而不是一个版本? 我们在Microsoft Azure上托pipe我们的NodeJS后端,不知道这是否相关,但似乎至less有效。 编辑: 我发现这个问题,在PHP中的hash_hmac自动导出它的数据为hex数据,crypto.createHmac导出它的数据作为原始的二进制数据,我直接转换成base64,我需要做的是首先导出数据到hex,然后转换那base64。

使用SHA256进行签名与使用RSA-SHA256进行签名之间的区别

我使用node.js玩数字签名 出于testing目的,我创build了一些XML数据的数字签名,首先使用SHA256,然后使用RSA-SHA256。 令我感到困惑的是, 两种签名方法都创build了完全相同的签名 。 两个签名是相同的。 如果它们是相同的,那么为什么两种不同的方法(SHA256与RSA-SHA256)? 我包含下面的代码: var crypto = require('crypto'), path = require('path'), fs = require('fs'), pkey_path = path.normalize('private_key.pem'), pkey = ''; function testSignature(pkey) { var sign1 = crypto.createSign('RSA-SHA256'), sign2 = crypto.createSign('SHA256'); fs.ReadStream('some_document.xml') .on('data', function (d) { sign1.update(d); sign2.update(d); }) .on('end', function () { var s1 = sign1.sign(pkey, "base64"), s2 = sign2.sign(pkey, "base64"); […]

expression密钥长度

是否有任何关于密码散列连接/expression会话数据的密钥长度的build议? 我看到从60多个string到规范的“键盘猫”的一切。 对于我的直接用例,我打算在整个站点上使用SSL,并且暴力攻击的回报是中等到低的。

如何在JavaScript / Node中计算SHA256散列和Base64string编码

我正尝试在JavaScript中重新创build以下C#代码。 SHA256 myHash = new SHA256Managed(); Byte[] inputBytes = Encoding.ASCII.GetBytes("test"); myHash.ComputeHash(inputBytes); return Convert.ToBase64String(myHash.Hash); 此代码返回“n4bQgYhMfWWaL + qgxVrQFaO / TxsrC4Is0V1sFbDwCgg =” 这是我迄今为止的JavaScript代码 var sha256 = require('js-sha256').sha256; var Base64 = require('js-base64').Base64; var sha256sig = sha256("test"); return Base64.encode(sha256sig); JS代码返回“OWY4NmQwODE4ODRjN2Q2NTlhMmZlYWEwYzU1YWQwMTVhM2JmNGYxYjJiMGI4MjJjZDE1ZDZjMTViMGYwMGEwOA ==” 这些是我用过的2个JS库 https://www.npmjs.com/package/js-sha256 https://www.npmjs.com/package/js-base64 有人知道如何使它工作? 我使用错误的库吗? 非常感谢

我怎样才能解密一个HMAC?

我可以使用以下方法制作HMAC: var encrypt = crypto.createHmac("SHA256", secret).update(string).digest('base64'); 我正试图用这个秘密解密一个编码的HMAC: var decrypt = crypto.createDecipher("SHA256", secret).update(string).final("ascii"); 以下是不成功的。 我如何用密钥解密HMAC? 我得到以下错误: node-crypto : Unknown cipher SHA256 crypto.js:155 return (new Decipher).init(cipher, password); ^ Error: DecipherInit error

在nodejs中encryption

我试图将以下php代码移植到node.js上的javascript: $mac = hash_hmac('SHA256', 'string', 'secret', true); $coded = base64_encode($mac); 我已经尝试了以下内容: var Crypto = require('crypto'); var code = Crypto.util.bytesToBase64(Crypto.HMAC(Crypto.SHA256, 'string', 'secret', { asBytes: true })); 我得到的错误: TypeError:Object #Object没有方法'HMAC' 我是新来的node.js,我做错了什么? 更新: var code = Crypto.createHmac('SHA256',secret_key).update(to_encode).digest('base64');