我需要使用公鑰(pem文件)對字符串進行加密,然後使用私鑰(也是pem)對其進行簽名。使用公鑰在node.js中加密數據
我加載了PEM文件罰款:
publicCert = fs.readFileSync(publicCertFile).toString();
但谷歌淘了幾個小時之後,我似乎無法找到一種方法使用公鑰來加密數據。在PHP中,我只需調用openssl_public_encrypt,但在節點或任何模塊中都看不到相應的函數。
如果有人有任何建議,請告訴我。
我需要使用公鑰(pem文件)對字符串進行加密,然後使用私鑰(也是pem)對其進行簽名。使用公鑰在node.js中加密數據
我加載了PEM文件罰款:
publicCert = fs.readFileSync(publicCertFile).toString();
但谷歌淘了幾個小時之後,我似乎無法找到一種方法使用公鑰來加密數據。在PHP中,我只需調用openssl_public_encrypt,但在節點或任何模塊中都看不到相應的函數。
如果有人有任何建議,請告訴我。
沒有圖書館需要的朋友將來的文檔,
輸入crypto
這裏是你可以用它來與RSA密鑰加密/解密字符串一個janky的小模塊:
var crypto = require("crypto");
var path = require("path");
var fs = require("fs");
var encryptStringWithRsaPublicKey = function(toEncrypt, relativeOrAbsolutePathToPublicKey) {
var absolutePath = path.resolve(relativeOrAbsolutePathToPublicKey);
var publicKey = fs.readFileSync(absolutePath, "utf8");
var buffer = new Buffer(toEncrypt);
var encrypted = crypto.publicEncrypt(publicKey, buffer);
return encrypted.toString("base64");
};
var decryptStringWithRsaPrivateKey = function(toDecrypt, relativeOrAbsolutePathtoPrivateKey) {
var absolutePath = path.resolve(relativeOrAbsolutePathtoPrivateKey);
var privateKey = fs.readFileSync(absolutePath, "utf8");
var buffer = new Buffer(toDecrypt, "base64");
var decrypted = crypto.privateDecrypt(privateKey, buffer);
return decrypted.toString("utf8");
};
module.exports = {
encryptStringWithRsaPublicKey: encryptStringWithRsaPublicKey,
decryptStringWithRsaPrivateKey: decryptStringWithRsaPrivateKey
}
我建議在可能情況下使用同步fs的方法,你可以使用的承諾,使這更好的,但對於簡單的使用案例這是我看到的工作方法,並將採取
node-rsa module這個怎麼樣?這是一個鏈接到test.js file that demonstrates usage。
也許我需要更熟悉RSA加密。我十幾次閱讀加密文檔,試圖看看如何去做我需要的東西,但我沒有找到任何東西。 你說的createCipheriv()會做我需要的,但我甚至不知道「iv」是什麼。我想這是因爲它在PHP和其他語言中更抽象。我會玩這個功能,看看我能不能把它工作。 – Clint 2012-01-06 07:15:42
在閱讀了關於createCipheriv的更多信息之後,它看起來並不是非對稱加密(公鑰/私鑰加密)。我不認爲這會滿足我的需求。加密確實有能力使用私鑰對加密的字符串進行簽名,這讓我想知道爲什麼我無法使用公鑰進行加密。看起來很奇怪,否則我完全錯過了一些東西。 – Clint 2012-01-06 07:25:35
iv是一個初始化函數。 http://en.wikipedia.org/wiki/Initialization_vector – 2012-01-06 14:43:27
更新的公共/私人解密和加密模塊是URSA。 node-rsa模塊已過時。
該節點模塊爲OpenSSL的RSA公鑰/私鑰密碼功能提供了一套相當完整的包裝。
NPM安裝大熊
熊族長久以來一直沒有維持。這些較新的實現可能有所幫助:https://github.com/tracker1/cryptico-js和https://github.com/rzcoder/node-rsa – 2014-08-20 01:34:25
TL; DR:小熊座是你最好的選擇。它真的很時髦,這不符合節點加密標準。
我發現的每個其他解決方案都不能在Windows中工作,或者實際上不是加密庫。由路易推薦的大熊看起來是最好的選擇。如果你不關心窗戶,你更加黃金。關於Ursa,我必須安裝Open SSL以及一些名爲「Visual C++ 2008 Redistributables」的東西,才能使npm install正常工作。這裏獲取的垃圾:http://slproweb.com/products/Win32OpenSSL.html
細目:
這是字面上我能找到的。
node-rsa不再依賴節點waf。它是瀏覽器兼容的。 – 131 2015-09-03 06:52:33
節點版本v0.11.13或更低版本本身不支持此功能,但似乎下一個版本的節點(a.k.a v0.12)將支持此功能。
這裏是線索:https://github.com/joyent/node/blob/v0.12/lib/crypto.js#L358
看到crypto.publicEncrypt
和crypto.privateDecrypt
這對我的作品......這是更好地融入本土... – ATOzTOA 2016-06-07 21:43:23
感謝編輯@uzyn – 2016-09-13 02:53:09
感謝您的解決方案@JacobMcKay救了我一兩個小時。 – uzyn 2016-09-13 06:18:07