【问题标题】:RSA Public key encryption using modulus and exponent使用模数和指数的 RSA 公钥加密
【发布时间】:2015-10-13 15:04:53
【问题描述】:

我想使用具有给定模数和指数值的 RSA 生成公钥。

public static string RSAPublic(string toEncrypt) {
    var crypt = AsymmetricKeyAlgorithmProvider.OpenAlgorithm(AsymmetricAlgorithmNames.RsaPkcs1);
    var buffer = CryptographicBuffer.ConvertStringToBinary(toEncrypt, BinaryStringEncoding.Utf8);

    string publikKey = modulus + exponent;
    publikKey.Replace("\r\n", "");

    var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(publikKey);

    string pk = System.Convert.ToBase64String(plainTextBytes);

    IBuffer keyBuffer = CryptographicBuffer.DecodeFromBase64String(pk);



    CryptographicKey key = crypt.ImportPublicKey(keyBuffer, CryptographicPublicKeyBlobType.X509SubjectPublicKeyInfo); // Throws exception here, have tried using all the 4 available BlobTypes



    // var key = crypt.CreateKeyPair(512);
    var sigBuffer = CryptographicEngine.Encrypt(key, buffer, null);
    string signature = CryptographicBuffer.EncodeToBase64String(sigBuffer);
    return signature;
}

以下是异常消息:“遇到 ASN1 错误标记值。(来自 HRESULT 的异常:0x8009310B)”

StackTrace:“在 Windows.Security.Cryptography.Core.AsymmetricKeyAlgorithmProvider.ImportPublicKey(IBuffer keyBlob, CryptographicPublicKeyBlobType BlobType) 在 MyProject.General.Utility.RSAPublic(String toEncrypt)"

我无法找出正确的方法来生成创建加密字符串所需的 CryptographicKey。任何帮助将不胜感激。

【问题讨论】:

  • 你提到你得到了一个异常:你到底得到了什么异常?
  • @user1666620 :使用 CryptographicPublicKeyBlobType.Pkcs1RsaPublicKey ,我得到了 ASN1 错误标签值。 (HRESULT 异常:0x8009310B)
  • 编辑您的问题并添加实际的异常消息以及堆栈跟踪。

标签: c# encryption windows-phone-8.1 rsa win-universal-app


【解决方案1】:

你应该看看你的公钥格式, 密钥格式必须遵守 ans.1 规则。 看这个问题 RSA Public Key format

如果您仍然不确定格式,只需使用 AsymmetricKeyAlgorithmProvider 创建两个或三个或更多公钥并将它们转换为十六进制字符串。

你可以找到格式。

我使用 rsapkcs1 创建一个示例公钥 30818902818100ae037f0bcb6b4a5b661d7fc43178133b190f12f6c4e0e3ca694d4ec47458862b89691cb06767aa5054a92fc61ec8dc5c53983341c78ba3b95faf887b108093b41632a2ae324b0aaccab4172d83d7691476a6a97683d595355bd0bfa1fa5ea4d9cf2d5836ddb471de1df34ec27b6f0c4f903a13b6700cfb08ada8e43cf3b0cf7b0203010001 P>

如果您使用 RsaPkcs1 创建密钥,则公钥将以 30818902818100 ae037f0bcb6b4a5b661d7fc43178133b190f12f6c4e0e3ca694d4ec47458862b89691cb06767aa5054a92fc61ec8dc5c53983341c78ba3b95faf887b108093b41632a2ae324b0aaccab4172d83d7691476a6a97683d595355bd0bfa1fa5ea4d9cf2d5836ddb471de1df34ec27b6f0c4f903a13b6700cfb08ada8e43cf3b0cf7b 以 0203010001 结尾

只需加入头部和尾部即可填充格式。

【讨论】:

    猜你喜欢
    • 2013-10-27
    • 1970-01-01
    • 2014-04-16
    • 2010-10-31
    • 2018-01-16
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多