验证由Windows Crypto API创建的Java中的签名

时间:2015-10-08 12:59:27

标签: java c++ rsa digital-signature cryptoapi

我有Crypto API创建的签名

if(!CryptCreateHash(hProv, CALG_MD5, 0, 0, &Hash))
    return;         
if(!CryptHashData(Hash, Buff,count, 0))
    return;     
if(CryptSignHash(Hash,AT_SIGNATURE,NULL,0,Buff,&count))
...

我想用Java验证签名。

C ++生成148字节的密钥长度,我需要一个java 162.我使用http://www.jensign.com/JavaScience/MSKeytoJKey/生成它。 要查看162生成的148重合。

然后我尝试验证签名

Signature dsa   = Signature.getInstance("MD5WithRSA");
dsa.initVerify(rsapublickey);
dsa.update(Text);
Sign = dsa.verify(TextSign);

你猜对了,Sign的值是假的。我错过了什么,这真的会去哪儿?

1 个答案:

答案 0 :(得分:0)

本机加密API使用little-endian字节顺序,而.NET Framework和JAVA使用big-endian字节顺序。如果要验证使用Crypto API生成的签名,则必须在调用函数之前交换签名字节的顺序,以验证Java中的签名。