Tag: cryptography

当openssl命令行执行时,Node.jsvalidation函数不validation签名

我正在尝试使用Node.jsencryption模块来validation某些数据的签名。 我正在使用Node.js 0.8.0。 文件中的数据已经使用MD5algorithm进行哈希处理,并使用专用RSA密钥进行签名,并将签名保存到单独的文件中。 这一切都是使用Java库完成的。 如果我使用openssl来validation签名,这是成功的,使用: openssl dgst -verify mykey.pem -signature example.sig hello.txt 它以“ Verified OK响应。 如果我更改hello.txt的单个字符,它不validation。 我可以添加一个-MD5参数到上面的命令,它仍然工作,但我认为这是默认的,但如果我说-MD4或-SHA它不validation。 这很好。 如果我然后尝试使用包装openssl的节点encryption模块,我不能得到此validation工作。 我的示例代码是: var crypto = require("crypto"); var fs = require("fs"); var data = fs.readFileSync("./hello.txt"); var pubkey = fs.readFileSync("./mykey.pem", "utf8"); var signature = fs.readFileSync("./example.sig"); var verifier = crypto.createVerify ('RSA-MD5'); verifier.update (data); var success = verifier.verify (pubkey, signature); […]

Nodejs crypto.pbkdf2结果不同于CryptoJS.PBKDF2

我在前端(CryptoJS)和后端(Node.js)上使用PBKDF2,两个派生密钥必须相同,所以我使用相同的salt,相同的algorithm,相同的迭代次数,相同的密码,但派生的密钥是不同。 这是浏览器/ cryptoJS代码,在注释示例盐和密钥。 (hex) <script type="text/javascript" src="pbkdf2.js"></script> <script type="text/javascript" src="sha512.js"></script> <script> var salt = CryptoJS.lib.WordArray.random(128 / 8); var key512Bits = CryptoJS.PBKDF2('anacleto', salt, { hasher:CryptoJS.algo.SHA512, keySize: 512 / 32, iterations: 1 }); console.log(salt.toString(CryptoJS.enc.Hex)); // 1427f23fd32f8f9902768e7ab7c7ffad console.log(key512Bits.toString(CryptoJS.enc.Hex)); // de3259de39fcc55531b91b4ffb2a6c29005c674cc95b3ec5bdf18412b6087d05921f3a0e4148fc34c88a04e980481d397a4c2b143edc0cb1bb5d7434ca3b4c25 </script> 这是nodeJS代码 var crypto = require('crypto'); var salt_hex = '1427f23fd32f8f9902768e7ab7c7ffad'; var key_hex = 'de3259de39fcc55531b91b4ffb2a6c29005c674cc95b3ec5bdf18412b6087d05921f3a0e4148fc34c88a04e980481d397a4c2b143edc0cb1bb5d7434ca3b4c25'; var salt = new […]

在nodejs中解密.Net cookie

我在.Net中创build了一个encryption的cookie,我试图在nodejs中解密它的内容。 但是nodejs总是抛出exception“TypeError:DecipherFinal fail” 在.NET中,我使用AESencryption方法 932D86BB1448EEAA423F38495A2290746D81C27E55D1DC264279537006D6F4CC. 我的web.config文件有以下行 <machineKey validationKey="A5326FFC9D3B74527AECE124D0B7BE5D85D58AFB12AAB3D76319B27EE57608A5A7BCAB5E34C7F1305ECE5AC78DB1FFEC0A9435C316884AB4C83D2008B533CFD9" decryptionKey="932D86BB1448EEAA423F38495A2290746D81C27E55D1DC264279537006D6F4CC" validation="SHA1" decryption="AES" /> 在.Net中生成我的cookie的代码如下所示: var ticket = new FormsAuthenticationTicket(0, "test", DateTime.Now, DateTime.Now.AddYears(1), true, "test"); var encryptedTicket = FormsAuthentication.Encrypt(ticket); Response.Cookies.Add(new HttpCookie(cookieName, encryptedTicket)); 解密cookie的nodejs代码是 var crypto = require('crypto'); var logger = require('winston'); var deckey = "932D86BB1448EEAA423F38495A2290746D81C27E55D1DC264279537006D6F4CC"; function hex2a(hex) { var str = ''; for (var i = 0; […]

Node.js和sha1

http://www.php.net/manual/en/function.sha1.php string sha1 ( string $str [, bool $raw_output = false ] ) 如果可选的raw_output设置为TRUE,则sha1摘要将以原始二进制格式返回,长度为20,否则返回值为40个字符的hex数字。 crypto = require("crypto"); console.log( new Buffer(crypto.createHash('sha1').update("some text").digest()).toString('base64') ); // N8KqY8OHc8KYw5lURzJiw6HCoAV8HmMuw5p3 console.log( new Buffer(crypto.createHash('sha1').update("some text").digest("hex")).toString('base64') ); // MzdhYTYzYzc3Mzk4ZDk1NDQ3MzI2MmUxYTAwNTdjMWU2MzJlZGE3Nw== console.log( new Buffer(crypto.createHash('sha1').update("some text").digest("base64")).toString('base64') ); // TjZwangzT1kyVlJITW1MaG9BVjhIbU11Mm5jPQ== <?php echo base64_encode(sha1("some text")); // MzdhYTYzYzc3Mzk4ZDk1NDQ3MzI2MmUxYTAwNTdjMWU2MzJlZGE3Nw== echo base64_encode(sha1("some text", true)); // <– how to reproduce it on […]

我怎样才能解密一个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

如何用密码创build随机encryption哈希

我想用node.jsencryption库创build一个salt-hash,而不必parsing任何硬编码的数据。 硬编码是什么意思? var salt, hardcodedString = "8397dhdjhjh"; crypto.createHmac('sha512', hardcodedString).update(salt).digest("base64"); 没有任何其他方式如何创build一个随机string,而不使用原始的JavaScript,随机函数或硬编码的东西? 问候 UPDATE var Crypto = require('crypto') , mongoose = require('mongoose'); module.exports = mongoose.model('User', new mongoose.Schema({ username: { type: String , required: true , index: { unique: true, sparse: true } , set: toLower }, email: { type: String , required: true , index: { unique: […]

使用公钥在Node.JSencryption中validation签名

有没有一种好的方法来validationNode.JS(v0.4 +)中的签名与公钥? 目前的encryption模块允许使用证书,但不能使用公钥。 例如: var crypto = require("crypto"); verifier = crypto.createVerifier("sha1"); verifier.update("signed data"); verifier.verify(CERT, signature); variablesCERT需要签名的证书(我猜公钥是从那个拉),但我拥有的是公钥而不是证书。 只有坚实的方式来实现这似乎是倾倒的数据的内容,公钥和签名到文件并执行openssl dgst fs.writeFileSync("public.key", pubkey); fs.writeFileSync("sig.sha1", signature); fs.writeFileSync("data.txt", data); exec("openssl dgst -sha1 -verify public.key -signature sig.sha1 data.txt", …) 但是,每次我需要validation签名时创build(和删除)文件看起来都是浪费。 任何好的想法如何做得更好? 更新2011-08-03 Node.js v0.5中的encryption模块允许使用证书和公钥 (RSA或X.509)

encryptionalgorithm列表

我试图find一个strings列表,可以使用一个encryptionalgorithm来适应这个函数,取代SHA256 。 crypto.createHmac("SHA256", secret).update(string).digest('base64'), 我已经认识到crypto使用openssl ,并且这些algorithm是特定于运行node.js的每个系统的。 通过以下命令,您可以看到系统可用的所有algorithm的列表。 openssl list-cipher-algorithms openssl list-cipher-commands 我将这两个命令的内容输出到了这个要点 。 令我困扰的是SHA256不在这两个列表中。 我真的很喜欢明确的algorithm列表。

用Node.js和MongoDB存储密码

我正在寻找一些如何使用node.js和mongodb安全地存储密码和其他敏感数据的例子。 我希望一切都使用一个独特的盐,我将存储在mongo文件中的哈希旁边。 对于身份validation,我只需要salt和encryptioninput,并将其匹配到存储的散列? 我是否需要解密这些数据?如果有,我该怎么做? 私人密钥,甚至腌制方法如何安全地存储在服务器上? 我听说AES和Blowfish都是很好的select,我应该用什么? 如何devise这个例子将是非常有帮助的! 谢谢!