如何解决使用公钥、RSA 和充气城堡解密
我需要使用 RSA 解密签名哈希。我有一个 288 个字符长的十六进制字符串,它是一个机构的通用公钥。它代表十六进制字节,所以总共 144 个字节。 前 8 个字节是所谓的 CAR。用于识别。接下来的 128 个字节是模数 N。接下来的 8 个字节是指数 E。
我以前从未接触过密码学,所以请放轻松。我将 C# 和 Bouncy Castle 库用于解密算法。现在,如果我理解正确,1024 位模数和 64 位指数并不奇怪。我目前有这段代码:
public byte[] rsa_decrypt(byte[] data)
{
var N = PublicKey.ToCharArray().Slice(16,256);
var E = PublicKey.ToCharArray().Slice(272,16);
RsaEngine rsa = new RsaEngine();
Org.BouncyCastle.Math.BigInteger modulus = new Org.BouncyCastle.Math.BigInteger(new string(N).Insert(0,"00"),16);
Console.WriteLine(modulus);
Org.BouncyCastle.Math.BigInteger exponent = new Org.BouncyCastle.Math.BigInteger(new string(E).Insert(0,16);
Console.WriteLine(exponent);
RsaKeyParameters x = new RsaKeyParameters(false,modulus,exponent);
var eng = new Pkcs1Encoding(new RsaEngine());
eng.Init(false,x);
return eng.ProcessBlock(data,data.Length);
}
Slice<T>(this T[],offset,length)
方法只是我写的一个小东西,用于将数组切成小块,没什么特别的,而且很有效。在字符串中插入“00”是因为我相信该字符串可能会被解释为无符号。
运行此代码时出现异常
Unhandled exception. Org.BouncyCastle.Crypto.InvalidCipherTextException: block incorrect at Org.BouncyCastle.Crypto.Encodings.Pkcs1Encoding.DecodeBlock(Byte[] input,Int32 inOff,Int32 inLen) at Org.BouncyCastle.Crypto.Encodings.Pkcs1Encoding.ProcessBlock(Byte[] input,Int32 length)
显然我做错了什么。谁能告诉我我做错了什么,为什么我做错了,最好是我应该做什么。同样,以前从未使用过加密算法或这个库。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。