Bootstrap

国密SM2电子签章JAVA实现

        本文默认所需的国密SM2证书已生成完成。基于BouncyCastle JAR包+itextpdf,利用itext提供的2个签名接口:ExternalDigest 及 ExternalSignature,修改BC部份代码实现国密SM2签名处理。具体处理如下:

1、pom.xml 引入 itextpdf 5.5.6 + bouncycastle jdk15on-1.60或以上版本

2、BouncyCastleDigest.java 增加

if(("1.2.156.10197.1.401").equals(oid)){

return new org.bouncycastle.jcajce.provider.digest.SM3.Digest();

}

3. DigestAlgorithms.java 增加

DIGEST_NAMES.put("1.2.156.10197.1.401",“SM3”);

ALLOWED_DIGESTS.put("SM3","1.2.156.10197.1.401");

4. EncryptionAlgorithms.java 增加

ALGORITHM_NAMES.put("1.2.156.10197.1.501","SM2");

5. PrivateKeySignature.java 中 sign(byte[] b) 方法增加

if("SM3".equalsIgnoreCase(this.hashAlgorithm)){

signMode = "SM3withSM2";

}

6. PdfPKCS7.java 中 setExternalDigest(...) 方法中 将 ECDSA 条件下的赋值改为

this.digestEncryptionAlgorithmOid = "1.2.156.10197.1.501";

;