我正在使用此行为node.js生成sha1 id:
crypto.createHash('sha1').digest('hex');
Run Code Online (Sandbox Code Playgroud)
问题是它每次都返回相同的id.
是否可以让它每次生成一个随机ID,以便我可以将它用作数据库文档ID?
Github的安全webhooks页面说:
==不建议使用普通运营商.一种方法,例如secure_compare执行"常量时间"字符串比较,这使得它对于针对常规相等运算符的某些定时攻击是安全的.
我bcrypt.compare('string', 'computed hash')在比较密码时使用.
是什么使这成为"安全比较",我可以使用cryptoNode中的标准库吗?
我试图在Node中复制PHP哈希生成函数.此哈希用作API的一部分.PHP版本创建系统接受的正确输出.节点版本创建了不同的输出,尽管我认为它们是函数上的相同输入.
这是因为PHP和Node HMAC功能有一些根本不同的方式吗?或者是因为我错过了一些带字符编码的怪癖?或者我只是搞砸别的东西?
PHP代码
$url = 'https://example.com/api/endpoint';
$user = 'apiuser';
// Example key
$key = '+raC8YR2F+fZypNJ5q+CAlqLFqNN1AlAfWwkwJLcI7jrAvppjRPikWp523G/u0BLSpN9+2LusJvpSwrfU9X2uA==';
$timestamp = gmdate('D, d M Y H:i:s T', 1543554184); // gmdate('D, d M Y H:i:s T');
$hashdata = "GET\n$url\n$user\n$timestamp\n";
print_r($hashdata);
/*
GET
https://example.com/api/endpoint
apiuser
Fri, 30 Nov 2018 05:03:04 GMT
*/
$decoded_key = base64_decode($key);
print_r(unpack('H*', $decoded_key));
// Array ( [1] => fab682f1847617e7d9ca9349e6af82025a8b16a34dd409407d6c24c092dc23b8eb02fa698d13e2916a79db71bfbb404b4a937dfb62eeb09be94b0adf53d5f6b8 )
$generated_hash = hash_hmac('sha256', $hashdata, $decoded_key, true);
$encoded_hash = base64_encode($generated_hash);
print_r($encoded_hash);
// vwdT8XhtSA1q+JvAfsRpJumfI4pemoaNFbjjc5JFsvw=
Run Code Online (Sandbox Code Playgroud)
Node.js代码
crypto = require('crypto');
moment = require('moment-timezone');
let url …Run Code Online (Sandbox Code Playgroud)