验证数字签名
verify digital signature
我想验证我的签名。我使用此代码
var encoder = new UTF8Encoding();
byte[] bytesToVerify = encoder.GetBytes(LoginChallenge);
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
RSAKeyInfo.Modulus = publickey1;
rsa.ImportParameters(RSAKeyInfo);
bool suc = rsa.VerifyData(bytesToVerify, CryptoConfig.MapNameToOID("SHA1"), signedBytes);
我有 public 字节数组格式的密钥。它在我的数据库中。像这样
enter image description here
总是 suc=false。我确定 bytetoverify 与方法符号中的输入值具有相同的值。
我的签到方法:
Signature signature=Signature.getInstance(Signature.ALG_RSA_SHA_PKCS1,false);
signature.init(thePrivateKey,Signature.MODE_SIGN);
signLength=signature.sign(buffer,(short)(ISO7816.OFFSET_CDATA & 0xFF), inputlength, buffer, (short)(0));
apdu.setOutgoingAndSend((short)0,signLength);
我不知道我用这种方式生成的 public 密钥是有问题还是符号有问题。在符号方法中我使用 sh1 和 pkcs1 但在验证中我只找到 sh1.
每个人都可以帮助我吗?
你在数据库中保存了什么?只是模数值?
RSA public 密钥有两个字段,模数和指数。他们都需要进行成功的密钥导入和操作。
在 99.999993% 的 RSA 密钥中,指数值是 new byte[] { 0x01, 0x00, 0x01 }
;所以你可以几乎总是只存储模数值,并假设Exponent
是什么。
为了获得最佳结果,请不要假设。或者,至少,如果指数值不是 0x010001
.
,则拒绝注册密钥
所以这实际上归结为:
- 您需要设置指数(为正确的值)
- 您需要确保您的导入逻辑与导出逻辑相匹配,以确保您loading/saving将相同的东西放入相同的地方。
我想验证我的签名。我使用此代码
var encoder = new UTF8Encoding();
byte[] bytesToVerify = encoder.GetBytes(LoginChallenge);
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
RSAKeyInfo.Modulus = publickey1;
rsa.ImportParameters(RSAKeyInfo);
bool suc = rsa.VerifyData(bytesToVerify, CryptoConfig.MapNameToOID("SHA1"), signedBytes);
我有 public 字节数组格式的密钥。它在我的数据库中。像这样
enter image description here
总是 suc=false。我确定 bytetoverify 与方法符号中的输入值具有相同的值。
我的签到方法:
Signature signature=Signature.getInstance(Signature.ALG_RSA_SHA_PKCS1,false);
signature.init(thePrivateKey,Signature.MODE_SIGN);
signLength=signature.sign(buffer,(short)(ISO7816.OFFSET_CDATA & 0xFF), inputlength, buffer, (short)(0));
apdu.setOutgoingAndSend((short)0,signLength);
我不知道我用这种方式生成的 public 密钥是有问题还是符号有问题。在符号方法中我使用 sh1 和 pkcs1 但在验证中我只找到 sh1.
每个人都可以帮助我吗?
你在数据库中保存了什么?只是模数值?
RSA public 密钥有两个字段,模数和指数。他们都需要进行成功的密钥导入和操作。
在 99.999993% 的 RSA 密钥中,指数值是 new byte[] { 0x01, 0x00, 0x01 }
;所以你可以几乎总是只存储模数值,并假设Exponent
是什么。
为了获得最佳结果,请不要假设。或者,至少,如果指数值不是 0x010001
.
所以这实际上归结为:
- 您需要设置指数(为正确的值)
- 您需要确保您的导入逻辑与导出逻辑相匹配,以确保您loading/saving将相同的东西放入相同的地方。