javascript - 在 JavaScript 中加密不会在 C# 中解密

标签 javascript c# encryption cryptography bouncycastle

我尝试在 JavaScript 中使用 RSA 加密,然后在 C# 中解密。在 JavaScript 中,我使用库 jsencrypt。在 C# 我使用 API“充气城堡”。当我用同一种语言进行加密/解密时,一切正常。我回来了 解密时正确的文本。当我尝试在 C# 中解密在 JavaScript 中加密的内容时,我什么也没做。 我确定两者之间的键是相同的。 代码示例如下。非常感谢任何有关如何解决此问题的帮助。

JavaScript

//using jsencrypt.min.js

var encrypt = new JSEncrypt();
encrypt.setPublicKey($('#pubkey').val());
var encrypted = encrypt.encrypt($('#input').val());

获取我从“加密”的 JavaScript 中获得的值,并在 C# 中将其用于“encyp”

    AsymmetricCipherKeyPair KeyParameterPrivate;
        byte[] cipheredBytes = Convert.FromBase64String(encyp);


        string privateKeyFileName = @"C:\private.pem";
        using (var fileStream2 = File.OpenText(privateKeyFileName))
        {
            PemReader pemReader2 = new Org.BouncyCastle.OpenSsl.PemReader(fileStream2);
            KeyParameterPrivate = (Org.BouncyCastle.Crypto.AsymmetricCipherKeyPair)pemReader2.ReadObject();
        }
        IAsymmetricBlockCipher cipher2 = new Org.BouncyCastle.Crypto.Engines.RsaEngine();
        RsaKeyParameters privateKey2 = (RsaKeyParameters)KeyParameterPrivate.Private;
        //cipher.Init(false, publicKey4);
        cipher2.Init(false, privateKey2);
        byte[] deciphered = cipher2.ProcessBlock(cipheredBytes, 0, cipheredBytes.Length);
        string decipheredText = utf8enc.GetString(deciphered);

最佳答案

我的建议是尽可能简单,不要为此使用 Bouncy CaSTLe。您需要创建用于加密的公钥、用于解密的私钥和用于获取私钥的证书。

首先,使用 OpenSSL 创建私钥和证书 PEM 文件:

openssl req -newkey rsa:1024 -nodes -keyout private_key.pem -x509 -days 365 -out certificate.pem

然后从您创建的证书创建公钥 PEM 文件:

openssl x509 -pubkey -noout -in certificate.pem > public_key.pem

然后使用您创建的私钥和证书 PEM 文件导出 PFX 文件:

openssl pkcs12 -export -out certificate.pfx -inkey private_key.pem -in certificate.pem

导出时,系统会要求您提供证书密码。

下面是如何在 C# 中进行 RSA 解密:

var cert = new X509Certificate2(@"C:\path\to\certificate.pfx", "password");
var rsaCng = (RSACng)cert.PrivateKey;
var decryptedText = Encoding.UTF8.GetString(rsaCng.Decrypt(Convert.FromBase64String(encryptedText), RSAEncryptionPadding.Pkcs1));

关于javascript - 在 JavaScript 中加密不会在 C# 中解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27727024/

相关文章:

java - 使用加密时CRC校验冗余?

powershell - 使用PowerShell的Coinspot API

javascript - 谷歌可视化-点击事件

c# - 这个设计使用动态好吗?

javascript - http 请求方法中的回调 - 未按正确顺序发生

c# - WPF - 没有焦点的滚动

c# - 存储 html css javascript 的最佳数据类型

python - 如何使用python管理CAdES和PAdES文件加密?

javascript - 并排获取两个 Slickgrid 表

javascript - AngularJs:将搜索条件从非常大的搜索表单传递到服务 - 创建自定义模型?