Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cryptography 如何在C#中使用RSA for Chilkat加密内容并在Java中解密? 更新_Cryptography_Chilkat - Fatal编程技术网

Cryptography 如何在C#中使用RSA for Chilkat加密内容并在Java中解密? 更新

Cryptography 如何在C#中使用RSA for Chilkat加密内容并在Java中解密? 更新,cryptography,chilkat,Cryptography,Chilkat,我发现很多人觉得我的问题太长(因为有很多东西要解释),读第一句话,然后就认为我在做最糟糕的事情,而没有看到整个问题。如果问题不够清楚,请告诉我。我试着用最简单的方式来浓缩它,不要引起任何混乱 公钥解密的原因是为了实现一种数字签名形式,其中接收方解密加密内容以显示哈希值。我认为没有必要在问题中提及这一点,因为我想了解如何以基本形式执行此操作。然而,为了避免关于RSA的所有内容以及公钥解密不好的任何进一步的担忧和警告,我用该免责声明更新了我的问题 背景 我编写了一个C#应用程序,它使用Chilka

我发现很多人觉得我的问题太长(因为有很多东西要解释),读第一句话,然后就认为我在做最糟糕的事情,而没有看到整个问题。如果问题不够清楚,请告诉我。我试着用最简单的方式来浓缩它,不要引起任何混乱

公钥解密的原因是为了实现一种数字签名形式,其中接收方解密加密内容以显示哈希值。我认为没有必要在问题中提及这一点,因为我想了解如何以基本形式执行此操作。然而,为了避免关于RSA的所有内容以及公钥解密不好的任何进一步的担忧和警告,我用该免责声明更新了我的问题


背景 我编写了一个C#应用程序,它使用Chilkat的RSA库获取内容并使用个人私钥对其进行加密

然后我想使用一个公共网站,允许某人通过使用相关的公钥来解密(加密的)内容

现在,我发现了一个第三方网站(顺便说一句,不是很多),它允许您使用RSA公钥解密内容()

不幸的是,当我尝试使用它时,我得到了一个“解密错误”

下面是一个示例设置。我已经生成了自己的个人公钥和私钥对。在我的C#应用程序中,我获取一个字符串,用私钥对其进行加密,并使用Base64对其进行编码

const string originalContent=“This!s original c0nt3nt”;
var rsa=new Chilkat.rsa();
rsa.GenerateKey(2048年);
var encryptedBytes=rsa.EncryptBytes(Encoding.UTF8.GetBytes(originalContent),true;
var encryptendeCodedstring=Convert.ToBase64String(encryptedBytes);
WriteLine($“加密:{Environment.NewLine}{encryptedCodedString}”);
Console.WriteLine();
var privateKeyBytes=rsa.ExportPrivateKeyObj().GetPkcs8();
var privateKeyEncodedString=Convert.ToBase64String(privateKeyBytes);
WriteLine($“私钥:{Environment.NewLine}{privateKeyEncodedString}”);
Console.WriteLine();
var publicKeyBytes=rsa.ExportPublicKeyObj().GetDer(false);
var publickeyncodedstring=Convert.ToBase64String(publicKeyBytes);
WriteLine($“公钥:{Environment.NewLine}{publickeyncodedstring}”);
Console.WriteLine();
var decyptedContentBytes=rsa.decryptedBytes(encryptedBytes,false);
var decryptedContentString=Encoding.UTF8.GetString(decyptedContentBytes);
WriteLine($“解密:{Environment.NewLine}{decryptedContentString}”);
Console.WriteLine();
Console.WriteLine(“按ENTER键退出”);
Console.ReadLine();
此示例控制台应用程序将写出流程下一部分所需的所有必要信息,并证明其原则上按预期工作

例如:

以下是控制台窗口中的示例值:

加密内容

H5JTsGhune1n3WWSPjwVJuUwp70Hsh1Ojaa0NFCVyq0qMjVPMxnknexOG/+HZDrIYsZM7EnPulpmihJk4QyLM8T2KNQIhbWuMHvzgHYlcPJdXpGZhAxwfklL4HP0iRUUXJBsJcS/2XoUDZ6elUoMIFY9cDB4O+WFxKS/5vzLEukTLbQ3aEBNg3xaf9fg12F8LcMxZ3GDsk0W9b6oJci09NTxXd6KKes0RM1hnOhw6bu0U33ZLF3sa0nH9Kdf8w23PoKc/tl12Jsa8N1A4OjaT5910UF8FRH6OkAbNKnxqXcL7+V4HVuHchi3ghuFivAW57boLeHr7OG7wOEC/gfPOw==
私钥

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
公钥

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

网站公钥解密尝试 现在,当我访问网站(如上所述)时,我将加密内容粘贴到加密内容文本块中,并将生成的公钥粘贴到其下方的文本块中,并将RSA密钥类型设置为
公钥
。但它失败了


第二次尝试 但是

我已经通过使用我生成的个人私钥和公钥进行了一些故障排除,我使用网站对我的密钥执行加密和解密,我能够加密我的字符串并成功解密加密内容,这让我相信我的Chilkat加密设置与一个网站使用的


我注意到的 因此,我开始阅读该网站提供的内容,该页面的作者发布了一篇关于如何实现这个()的说明,该说明使用了javarsa库。显然,有两种Java RSA密码可以使用“RSA”和“RSA/ECB/PKCS1P”

我对javalibs不太熟悉,我对密码学有足够的了解,知道如何完成任务,但还有很多技术方面我还不清楚,可以帮助我找到下一步的方向


问题: 我的问题是,Chilkat中是否有我需要设置的内容,以便它能够加密允许Java应用程序(如上面发布的网站链接)能够解密的内容?(当然Chilkat也需要能够解密)

我(希望)在阅读了第一部分之后就可以回答这个问题。我说到这里,你写了“…我拿了一个字符串,用一个私钥对它进行加密”,这引起了人们的关注

公钥加密应该是使用收件人的公钥进行加密的地方。私钥用于解密。加密的要点是,只有预期的收件人才能解密和查看邮件。使用公钥/私钥对,您可以向任何人提供公钥,但您只能拥有私钥。因此,任何人都可以使用您的公钥加密为您准备的消息,但您是唯一可以解密的人。这是有道理的

签名与此相反:您使用私钥进行签名,任何人都可以使用您的公钥进行验证。签名可以选择性地包含签名数据,因此验证签名的行为也提取原始数据。因此,您可以验证(1)数据只能由私钥持有者签名,(2)数据未被修改,以及(3)恢复原始数据

Chilkat的API提供了以相反的方式使用公钥/私钥的能力,这没有任何意义,但这是必要的,因为“存在”系统