【问题标题】:Verify a signature in Java that is created by Windows Crypto API验证由 Windows Crypto API 创建的 Java 签名
【发布时间】:2015-10-08 12:59:27
【问题描述】:

我有 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。我错过了什么,这真的会发生吗?

【问题讨论】:

  • 你是如何解决这个问题的?我也面临同样的问题。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多