小编Ale*_*MAY的帖子

使用NIST P-256类型密钥和SHA-256算法验证签名

我使用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)

java signature sha256 x509certificate ecdsa

5
推荐指数
0
解决办法
511
查看次数

标签 统计

ecdsa ×1

java ×1

sha256 ×1

signature ×1

x509certificate ×1