首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在vb.net中使用公钥加密与通过jsencrypt加密产生的结果大不相同。

在vb.net中使用公钥加密与通过jsencrypt加密产生的结果大不相同。
EN

Stack Overflow用户
提问于 2021-01-18 16:13:34
回答 1查看 421关注 0票数 0

我正试图向第三方发送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代码:

代码语言:javascript
复制
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

代码语言:javascript
复制
<%@ 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

代码语言:javascript
复制
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=

EN

回答 1

Stack Overflow用户

发布于 2021-02-22 08:10:06

为了实现与.NET的互操作性,我设法扭转了JSEncrypt和修复垫子。我还为JS的可能性添加了PrivateKey加密。

您可以在这里阅读使用我的Decrypting RSA with JavaScript版本的JSEncrypt的人。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65778206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档