我知道有一些关于此的帖子,但没有一个解决我的问题所以我会切入追逐。
我使用JSEncrypt(javascript)使用以下代码加密了一个字符串:
var rsa = new JSEncrypt();
rsa.setPublicKey(pubKey);
var encrypted = rsa.encrypt($(this).text());
公钥存储在var中,如下所示:
var pubKey = "-----BEGIN PUBLIC KEY-----\
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCkskeHcz6zTvnXKGHbCkfeEnKF\
38j1hEgWw9UAZlg5a7m/1AaHkqkvKUOfoX+zSYH4CJr/MEVmrEa2ucPjKljXK14M\
74NzSwYuPxaikpfwxe7qvn1/0TIqahVHEiSmqieLIl+gHIyAc32e/wUyjhGFjbwL\
eJ/hBDTkt6O/QajWKwIDAQAB\
-----END PUBLIC KEY-----";
然后我使用生成的密文并将其发送到需要解密的c#。我正在使用Bouncy Castle并且已经编写了代码:
public string Decrypt(string cipherText)
{
var bytesToDecrypt = Convert.FromBase64String(cipherText);
AsymmetricCipherKeyPair keyPair;
using (var reader = File.OpenText(AppDomain.CurrentDomain.BaseDirectory + @"/scripts/private.pem"))
{
keyPair = (AsymmetricCipherKeyPair)new PemReader(reader).ReadObject();
}
var engine = new RsaEngine();
engine.Init(false, keyPair.Private);
var decrypted = engine.ProcessBlock(bytesToDecrypt, 0, bytesToDecrypt.Length);
var decryptedMessage = Encoding.UTF8.GetString(decrypted);
return decryptedMessage;
}
它没有错误地进行解密,但输出如下所示:
"\u0002��lT�J;�ol�\u008fY�L:GK=\u0002�(�����\\\u0003ܢ�fMT�\u001eoqR�\\\u000f�s�A��+ښ�|����\u0001J�s�w[\u001egſ\u0012^7�\u000f44Qy\a*�T�~Tu�Ei�O/<�\u000f!S:�]\u0018V<7S\n:x@���GȀ\u0016.w���Lb�\0"
我试图通过以下方式专门使用PKSC#1:
public string Decrypt(string cipherText)
{
var bytesToDecrypt = Convert.FromBase64String(cipherText);
AsymmetricCipherKeyPair keyPair;
using (var reader = File.OpenText(AppDomain.CurrentDomain.BaseDirectory + @"/scripts/private.pem"))
{
keyPair = (AsymmetricCipherKeyPair)new PemReader(reader).ReadObject();
}
Pkcs1Encoding engine = new Pkcs1Encoding(new RsaEngine());
engine.Init(false, keyPair.Private);
var decrypted = engine.ProcessBlock(bytesToDecrypt, 0, bytesToDecrypt.Length);
var decryptedMessage = Encoding.UTF8.GetString(decrypted);
return decryptedMessage;
}
我在这里显然有一些错误,因为decryptedMessage =“”和解密的字节=字节[0]
如何解决此问题,以便正确解密cipherText。
据我所知,JSEncrypt使用PKSC1编码加密为默认值?
感谢任何帮助。
请避免粗鲁的评论,因为正确学习是我在这里发帖的原因。
提前感谢您的帮助!