我正试图向第三方发送RSA加密字符串。他们给了我一把公钥。我有多个系统需要传输数据。
其中一个这样的系统是vb.net/asp.net,它使用javascript来完成完美的加密工作,通过jsencrypt: works https://unpkg.com/browse/jsencrypt@2.3.1/README.md,结果是一致的344个字符并以=结尾。
我在vb.net中也有一个桌面应用程序需要这样做,所以我使用的是vb.net,但是结果比我通过JS代码看到的要长得多。(与JS代码一样,它也不以"=“结尾)结果是一致的392,永远不会以=结尾。
以下是我的vb.net代码:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim strPublicKey As String = "<RSAKeyValue><Modulus>[Redacted]</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>"
Dim fStringToSend As String = "This is a test."
Dim byStringToSend As Byte() = Encoding.UTF8.GetBytes(fStringToSend)
Dim RSA As System.Security.Cryptography.RSACryptoServiceProvider = New System.Security.Cryptography.RSACryptoServiceProvider(1024)
RSA.FromXmlString(strPublicKey)
Dim strEncryptedStringToSend As String = Convert.ToBase64String(RSA.Encrypt(byStringToSend, True))
TextBox1.Text = strEncryptedStringToSend
End Sub我遗漏了什么?如果需要更多的数据来诊断,请告诉我&谢谢!
编辑(添加完整代码,使用我自己生成的用于测试的键)
EncTest.aspx
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="EncTest.aspx.vb" Inherits="EncTest" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script type="text/javascript" src="jsencrypt.js"></script>
<script type="text/javascript">
const publicKey = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC0qoqRSNKH+sq7mZKm9f822bhqtD4y4DIRD8++9d0zok5FQrjZHSuGc917zzUGd2IiUzRrLOt/ZMenk42/Wm55rkYf9/MsdHo94vqcHj/5yFYg3QUhgN7l7okIRfAzCkxMl/6x4RymVInB1td5F6N2mChqRm+hzWr9d0I4wLWOpwIDAQAB';
function encText() {
var textToEncrypt = 'This is a test.';
const crypt = new JSEncrypt();
crypt.setKey(publicKey);
const encryptedText = crypt.encrypt(textToEncrypt);
document.getElementById('Label2').innerHTML = encryptedText;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="Button1" runat="server" Text="net" /><br />
<br />
<asp:label ID="Label1" runat="server"></asp:label><br />
<br />
<div id="Label2"></div><br />
<br />
<div onclick="encText();">js</div>
</div>
</form>
</body>
</html>EncTest.aspx.vb
Partial Class EncTest
Inherits System.Web.UI.Page
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim strPublicKey As String = "<RSAKeyValue><Modulus>MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC0qoqRSNKH+sq7mZKm9f822bhqtD4y4DIRD8++9d0zok5FQrjZHSuGc917zzUGd2IiUzRrLOt/ZMenk42/Wm55rkYf9/MsdHo94vqcHj/5yFYg3QUhgN7l7okIRfAzCkxMl/6x4RymVInB1td5F6N2mChqRm+hzWr9d0I4wLWOpwIDAQAB</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>"
Dim fStringToSend As String = "This is a test."
Dim byStringToSend As Byte() = Encoding.UTF8.GetBytes(fStringToSend)
Dim RSA As System.Security.Cryptography.RSACryptoServiceProvider = New System.Security.Cryptography.RSACryptoServiceProvider(1024)
RSA.FromXmlString(strPublicKey)
Dim strEncryptedStringToSend As String = Convert.ToBase64String(RSA.Encrypt(byStringToSend, False))
Label1.Text = strEncryptedStringToSend
End Sub
End Class下面是加密字符串的示例:.net:.net
javascript: UGjvEQy5ZFSDJt/SKL/39giZP7iYqlR3u3f6P5FpCf/z5p/lnIIyhSNNoSOwKQspPajbczO9DxSFElKKmQSEH9keQrhj4DtcSyPMHInFWra13/fWK9VA5XiktEc2vb9XUQVeZ7DS19ZDYVq7cpA9vApiYztSMClS8CCMuatO0Gs=
发布于 2021-02-22 08:10:06
为了实现与.NET的互操作性,我设法扭转了JSEncrypt和修复垫子。我还为JS的可能性添加了PrivateKey加密。
您可以在这里阅读使用我的Decrypting RSA with JavaScript版本的JSEncrypt的人。
https://stackoverflow.com/questions/65778206
复制相似问题