【发布时间】:2015-05-20 15:33:24
【问题描述】:
我正在尝试使用私钥对加密消息进行签名并在 Java 中对其进行验证。这是我第一次使用加密和签名,所以我不确定它应该如何工作,我有点卡在这里。验证总是返回 false。
我在这里签名:
public byte[] rsaSign (byte[] data) {
byte[] cipherData = null;
try {
RSAPrivateKeySpec keySpec = new RSAPrivateKeySpec(signModulus, signExponent);
KeyFactory fact = KeyFactory.getInstance("RSA");
PrivateKey privKey = fact.generatePrivate(keySpec);
Signature s = Signature.getInstance("SHA1withRSA");
s.initSign(privKey);
s.update(data);
return s.sign();
}
return cipherData;
}
我在这里尝试验证签名:
public boolean rsaVerify (byte[] data, byte[] signature) {
boolean success = false;
try {
RSAPublicKeySpec keySpec = new RSAPublicKeySpec(signModulus, signPublicExponent);
KeyFactory fact = KeyFactory.getInstance("RSA");
PublicKey pubKey = fact.generatePublic(keySpec);
Signature s = Signature.getInstance("SHA1withRSA");
s.initVerify(pubKey);
s.update(data);
success = s.verify(signature);
return success;
}
return false;
}
任何人都可以看到问题吗?密钥在 C# 中生成并在 java 中转换为 BigIntegers。
【问题讨论】:
-
对我来说,这显然看起来像一个与图书馆相关的问题,而且正如 Ilmari 所提到的,在 SO 上会好很多。您应该强烈考虑迁移您的问题,因为它很可能会在 SO 上得到回答。
-
我确实在 SO 上发布了它,但我没有得到任何答案。我会考虑让它自成一体并再试一次。谢谢!
-
@user3685322:确保将输入值发布到任何构建signModulus、signExponent、signPublicExponent;问题可能就在那里。
标签: java cryptography rsa digital-signature