【问题标题】:.NET Framework RsaCng exception.NET Framework RsaCng 异常
【发布时间】:2021-05-06 13:15:26
【问题描述】:

我正在学习 .NET 中的密码学,我编写了以下函数作为测试:

byte[] foo(byte[] input, string keyContainerName)
{
   CngKey key = CngKey.Open(keyContainerName);
   RSACng rsa = new RSACng(key);
   rsa.KeySize = 2048;
   byte[] v = rsa.Encrypt(input, RSAEncryptionPadding.OaepSHA512);

   CngKey keyb = CngKey.Open(keyContainerName);
   RSACng rsab = new RSACng(keyb);
   rsab.KeySize = 2048;
   return rsab.Decrypt(v, RSAEncryptionPadding.OaepSHA512);
}

当我尝试执行它时,rsab.Decrypt() 抛出一个 Cryptographic 异常并显示消息:“参数不正确。”。

为什么会这样?我哪里做错了?

附:我之前使用CngKey.Create() 在KSP 中创建了一个密钥对。 foo 使用 keyContainerName 调用传递给 CngKey.Create() 的 keyName。

【问题讨论】:

  • 您是通过编写自己的方法来试验 RSA 加密功能,还是想在某种应用程序中使用 RSA。在第二种情况下,更好的方法是使用像“ExpressSecurity”这样的加密库
  • 我正在创建一个加密应用程序,它将为用户提供使用对称和非对称算法加密/解密文本消息(或文件)的能力(在后台,只有对称密钥会被加密)。我写的不对称方法不起作用,所以我开始测试。 '''foo''' 是对我不起作用的综合。 //编辑:我搜索了“ExpressSecurity”。我的应用程序是一个离线 .NET Framework Windows 窗体项目。它用于在本地加密/解密事物(使用其他方式发送)。
  • 加密密钥和解密密钥必须相同。每次调用 new RSACng 时都会生成一个新密钥,因此您的解密密钥与加密密钥不同。
  • 如果是这样的话,Key Storage Provider的作用是什么?
  • 如果您预先创建的密钥是 2048 位,则分配 KeySize 属性最多不会执行任何操作。如果不是,请分配与您的密钥分离的属性并随机创建一个新的。

标签: c# .net rsa cng


【解决方案1】:

如果你想创建一个做对称和非对称加密和解密的应用程序,你可以尝试通过 NuGet 集成 ExpressSecurity 库

更多信息:https://github.com/sangeethnandakumar/Express-Security-Library

AES - 对称加密(用于文件)

var password = "sangeeth123";
var inputPath = "C:\sample.txt";
var outputPath = "C:\sample.txt.aes";

//AES Encription
AESEncription.AES_Encrypt(inputPath, password);
//AES Description
AESEncription.AES_Decrypt(outputPath, password);

RSA - 非对称加密(用于字符串和文本)

//Generate Keys
var publicKeyPath = "C:\public_key.rsa";
var privateKeyPath = "C:\private_key.rsa";
RSAEncription.MakeKey(publicKeyPath, privateKeyPath);

var input = "sangeeth"

//RSA Encription
var ciphertext = RSAEncription.EncryptString(input, publicKeyPath);
//RSA Description
input = RSAEncription.DecryptString(ciphertext, privateKeyPath);

【讨论】:

    猜你喜欢
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    • 2012-04-09
    • 2020-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多