【发布时间】:2019-04-25 21:47:35
【问题描述】:
我有一个用 RSA 公钥加密的字符串,我需要用 RSA 私钥解密一个字符串。
我已经有一个可用的 Java 代码,但我需要用 Node.js 库编写一个类似的代码来解密我的消息。
这是有效的 Java 代码,
public static String getDecrypted(String data, String Key)
throws NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
PrivateKey pk = KeyFactory.getInstance("RSA").generatePrivate(
new PKCS8EncodedKeySpec(Base64.getDecoder().decode(Key.getBytes())));
cipher.init(Cipher.DECRYPT_MODE, pk);
byte[] encryptedbytes = cipher.doFinal(Base64.getDecoder().decode(data.getBytes()));
return new String(encryptedbytes);
}
我找不到相应的 node.js 代码。
我有一个 Base64 编码的字符串,如下所示
S+JnXECfe8zHO69Mp0oh6ux******.......
并且拥有如下的私钥,
MIIJQgIBADANBgkqhkiG9w0BAQEFAASCC*****............
我无法在 node.js 中使用加密模块获得类似的代码。因为,我是这个加密模块的新手,我不确定我尝试的代码是否正确,
//decryption
const crypto = require('crypto');
const PK_HEADER = '\n-----BEGIN RSA PRIVATE KEY-----\n'
const PK_FOOTER = '\n-----END RSA PRIVATE KEY-----\n'
const pkey ='MIIJQgIBADANBgkqhki......'
const privateKey = `${PK_HEADER}${pkey}${PK_FOOTER}`
const privateEncodedKey = Buffer.from(privateKey, 'base64')
const response = "0f8c396c5279a...";
const decrypt = (privateEncodedKey, message) => {
let enc = crypto.privateDecrypt({
key: privateEncodedKey,
padding: crypto.RSA_PKCS1_OAEP_PADDING
}, Buffer.from(message, 'hex'));
return enc.toString();
};
console.log(decrypt(privateEncodedKey, response ))
你能帮我们修改 node.js crypto 中的代码吗?
这里是解密的细节..
算法 RSA (Rivest–Shamir–Adleman) 模式 ECB(电子密码本) 填充 OAEPWithSHA-1AndMGF1Padding
【问题讨论】: