我写了一个简单的符号代码。这个简单的签名代码并没有验证。
dsa.verify(digitalSignature)
返回 false。
为什么这个验证失败呢?
应用服务器是weblogic 12.2.1.4.0。
URL url = Thread.currentThread().getContextClassLoader().getResource("sueprv.gsdk");
InputStream is = url.openStream();
byte[] pk = new byte[335];
int rd = (is.read(pk));
privateKey = createPrivateKey(pk);
signature.initSign(privateKey);
byte[] bytes = "this is a test".getBytes();
signature.update(bytes);
byte[] digitalSignature = signature.sign();
URL url1 = Thread.currentThread().getContextClassLoader().getResource("suepub.gsdk");
InputStream inputStream = url1.openStream();
pk = new byte[444];
rd = (inputStream.read(pk));
Signature dsa = Signature.getInstance("SHA1withDSA", "SUN");
dsa.initVerify(createPublicKey(pk));
dsa.update(bytes);
System.out.println(dsa.verify(digitalSignature));
最佳答案
经过多次调试,我发现了这部分代码的问题:
rd = (inputStream.read(pk));
在代码中,我从 inputStream 读取了固定大小为 444 的公钥,但在调试中我发现无法读取 3 个字节的公钥。所以这造成了麻烦,因此该标志的验证失败。
关于java - 签名无法使用 SHA1withDSA 进行验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58899761/