【问题标题】:how to encrypt and decrypt with only public key with rsa c#如何使用 rsa c# 仅使用公钥加密和解密
【发布时间】:2017-07-02 22:45:41
【问题描述】:

我想仅使用公钥加密和解密 RSA,但在解密端出现错误。错误:“未知的块类型” 你能帮忙吗?

BigInteger rsaPubMod = new BigInteger(Base64.Decode("ALGZqqOFBDh6qULIV0hf5g+Zg5uQqTYWhrw9fzUJwWL8dW7V6kd+9kO8yD+1/f8NVmSDAWGfmVImsPNZp/8x/tF/DycPi5vfRuzHfFcT0mSgD7VW2CfuKM0Gh2WOpgXct6IMC7UsWTkPf8VBSgHobbkr+Ex5pm09mooe2KXTtXN3"));
BigInteger rsaPubExp = new BigInteger(Base64.Decode("AQAB"));
Org.BouncyCastle.Crypto.AsymmetricCipherKeyPair keyPair = new AsymmetricCipherKeyPair(new RsaKeyParameters(false, rsaPubMod, rsaPubExp), new RsaKeyParameters(true, rsaPubMod,rsaPubExp));
RsaKeyParameters pubParameters = new RsaKeyParameters(false, rsaPubMod, rsaPubExp);
IAsymmetricBlockCipher eng = new Pkcs1Encoding(new RsaEngine());
eng.Init(true, pubParameters);
byte[] encdata = Convert.FromBase64String("test");
var encdataResult = eng.ProcessBlock(encdata, 0, encdata.Length);
string result = Convert.ToBase64String(encdataResult);
IAsymmetricBlockCipher deng = new Pkcs1Encoding(new RsaEngine());
deng.Init(false, pubParameters);
byte[] decdata = Convert.FromBase64String(result);
var dencdataResult = deng.ProcessBlock(decdata, 0, decdata.Length);
string result2 = Encoding.UTF8.GetString(dencdataResult);

【问题讨论】:

  • 如果只有公钥的人能够加密和解密,那有什么意义呢?
  • 看来,您应该阅读一些有关 RSA 工作原理的内容 :)
  • 也许您需要的是对称加密,例如 AES(高级加密标准),它使用单个密钥进行加密和解密。另请注意,非对称数据大小的限制小于密钥大小。
  • 没有人能做到这一点。您需要了解 AES、RSA 等对称和非对称算法。
  • 毕竟我想要的是用固定的公钥对数据进行加解密。研究了RSA加解密的方法,但没有找到只用公钥进行加解密的例子。你有关于这个主题的任何信息吗?

标签: c# encryption cryptography rsa bouncycastle


【解决方案1】:

RSA 是一种非对称算法。使用公钥,您可以加密或执行签名验证。使用私钥,您可以解密、执行签名创建或创建公钥。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 2014-06-23
    • 1970-01-01
    相关资源
    最近更新 更多