我使用SHA-256算法和NIST P-256类型密钥在Java中验证签名时遇到问题.
我有一个X509证书(由证书颁发机构提供),其中包含一个公钥,我应该证明我收到的消息的真实性.
我收到的签名用Base32编码(103个字符),我将其解码为二进制.我获得了64个八位字节的字节数组.
关于公钥的信息:
Sun EC public key, 256 bits
public x coord: 76693623628200764797317561328856095594448010045454057728566183687964056347177
public y coord: 111784915166853162657631137717721670318464358783507947441022826650722573271612
parameters: secp256r1 [NIST P-256, X9.62 prime256v1] (1.2.840.10045.3.1.7)
Run Code Online (Sandbox Code Playgroud)
(编辑)我用来验证我的消息的真实性的方法:
public static void verify(String message, String signatureReceived, String pathToCertificate) {
try {
final X509Certificate certificat = getCertificate(pathToCertificate);
final PublicKey publicKey = certificat.getPublicKey();
final byte[] signatureReceivedInBinary = BaseEncoding.base32().decode(signatureReceived);
byte[] rBytes = Arrays.copyOfRange(signatureReceivedInBinary, 0, 32);
byte[] sBytes = Arrays.copyOfRange(signatureReceivedInBinary, 32, 64);
BigInteger r = new BigInteger(1, rBytes);
BigInteger s = new BigInteger(1, sBytes);
ASN1Integer …Run Code Online (Sandbox Code Playgroud)