RSA公钥加密使用的模数和指数

本文关键字:指数 公钥 加密 密使 RSA | 更新日期: 2023-09-27 18:04:08

我想使用给定模数和指数值的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 bad tag value met. "(来自HRESULT: 0x8009310B的异常)"

StackTrace: " at windows . security . cryptographic . core . asymmetrickeyalgorithmprovider . "ImportPublicKey(IBuffer keyBlob, CryptographicPublicKeyBlobType BlobType)在MyProject.General.Utility。RSAPublic(字符串toEncrypt)"

我无法找出正确的方法来生成创建加密字符串所需的CryptographicKey。

RSA公钥加密使用的模数和指数

您应该查看一下您的公钥格式,密钥格式必须遵守1规则。看看这个问题RSA公钥格式

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

你可以找到格式

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

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

结束

只需连接标题和尾部来填充格式