exam-system/pom.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
exam-system/src/main/java/com/gkhy/exam/pay/utils/Sign.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
exam-system/src/main/java/com/gkhy/exam/pay/utils/SignCommond.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
exam-system/src/main/java/com/gkhy/exam/pay/utils/SignDto.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
exam-system/pom.xml
@@ -38,6 +38,12 @@ <scope>compile</scope> </dependency> <dependency> <groupId>org.dom4j</groupId> <artifactId>dom4j</artifactId> <version>2.1.3</version> <!-- 请检查最新版本 --> </dependency> </dependencies> </project> exam-system/src/main/java/com/gkhy/exam/pay/utils/Sign.java
对比新文件 @@ -0,0 +1,34 @@ package com.gkhy.exam.pay.utils; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; public class Sign { private SignCommond signCommond; public Sign() { this.signCommond = new SignCommond(); } public Element getSignature(String plain) { SignDto signDto = this.signCommond.signSm3Detach(plain); Document document = DocumentHelper.createDocument(); Element signature = document.addElement("Signature"); signature.addElement("id", "InvoicingParty"); Element signedInfo = signature.addElement("SignedInfo"); signedInfo.addElement("Reference").addAttribute("URI", "/EInvoice/Headerl/EInvoice/EInvoiceData"); signedInfo.addElement("SignatureAlgorithm").setText(signDto.getSignatureAlgorithm()); signedInfo.addElement("SignatureFormat").setText(signDto.getSignatureFormat()); signature.addElement("SignatureTime").setText(signDto.getSignatureTime()); signature.addElement("SignatureValue").setText(signDto.getSignatureValue()); Element keyInfo = signature.addElement("KeyInfo"); keyInfo.addElement("SerialNumber").setText(signDto.getSerialNumber()); keyInfo.addElement("X509IssuerName").setText(signDto.getIssuerDn()); return signature; } } exam-system/src/main/java/com/gkhy/exam/pay/utils/SignCommond.java
对比新文件 @@ -0,0 +1,30 @@ package com.gkhy.exam.pay.utils; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Base64; import java.util.Date; public class SignCommond { public SignDto signSm3Detach(String plain) { try { // 使用 SM3 算法生成摘要 MessageDigest md = MessageDigest.getInstance("SM3"); byte[] hashBytes = md.digest(plain.getBytes()); // 将摘要转换为 Base64 编码的字符串 String signatureValue = Base64.getEncoder().encodeToString(hashBytes); SignDto signDto = new SignDto("SM3", "Base64", new Date(), signatureValue, "1234567890", "issuerDn"); return signDto; } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return null; } } exam-system/src/main/java/com/gkhy/exam/pay/utils/SignDto.java
对比新文件 @@ -0,0 +1,82 @@ package com.gkhy.exam.pay.utils; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import java.util.TimeZone; public class SignDto { private String signatureAlgorithm; private String signatureFormat; private String signatureTime; private String signatureValue; private String serialNumber; private String issuerDn; private static final String UTC_DATE_TIME = "dd MM yyyy HH:mm:ss z"; public static String formatWithTime(Date date) { SimpleDateFormat sdf = new SimpleDateFormat(UTC_DATE_TIME, Locale.CHINA); sdf.setTimeZone(TimeZone.getTimeZone("GMT+8")); return sdf.format(date); } public SignDto(String signatureAlgorithm, String signatureFormat, Date signatureTime, String signatureValue, String serialNumber, String issuerDn) { this.signatureAlgorithm = signatureAlgorithm; this.signatureFormat = signatureFormat; this.signatureTime = formatWithTime(signatureTime); this.signatureValue = signatureValue; this.serialNumber = serialNumber; this.issuerDn = issuerDn; } // Getters and Setters public String getSignatureAlgorithm() { return signatureAlgorithm; } public void setSignatureAlgorithm(String signatureAlgorithm) { this.signatureAlgorithm = signatureAlgorithm; } public String getSignatureFormat() { return signatureFormat; } public void setSignatureFormat(String signatureFormat) { this.signatureFormat = signatureFormat; } public String getSignatureTime() { return signatureTime; } public void setSignatureTime(String signatureTime) { this.signatureTime = signatureTime; } public String getSignatureValue() { return signatureValue; } public void setSignatureValue(String signatureValue) { this.signatureValue = signatureValue; } public String getSerialNumber() { return serialNumber; } public void setSerialNumber(String serialNumber) { this.serialNumber = serialNumber; } public String getIssuerDn() { return issuerDn; } public void setIssuerDn(String issuerDn) { this.issuerDn = issuerDn; } }