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

Verify a signature in Java that is created by Windows Crypto API

本文关键字:Java 签名 创建 API Windows Crypto 验证      更新时间:2023-10-16

我有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的值是false。我错过了什么,这真的会有什么结果吗?

本地加密API使用小端字节顺序,而。net框架和JAVA使用大端字节顺序。如果您正在验证使用Crypto API生成的签名,则必须在调用Java中验证签名的函数之前交换签名字节的顺序。