跳到主要内容

附录 1

数字签名验证

步骤1:导入所需的包

import java.security.KeyFactory;
import java.security.PublicKey;
import java.security.Signature;

步骤2:从公钥字节创建一个 PublicKey 对象

KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(new X509EncodedKeySpec(publicKeyBytes));

步骤3:创建一个 Signature 对象,并用公钥进行初始化

Signature signature = Signature.getInstance("SHA256withRSA");
signature.initVerify(publicKey);

步骤 4:将除了 signedMessage 之外的所有参数转换为字符串,并转换为字节

response.setSequenceNo("1");
response.setSourceSystem("mxx");
response.setMsgVer("1.0");
response.setTxnID("20XX0825023XXXXX");
response.setResultCode("0");
response.setRespCd("00");
response.setOrgRespCd("00");
response.setRRN("32376300XXXX");
response.setSTAN("006XXX");
response.setAuthIdResp("945XXX");
response.setMRN("23237V6XXX");
response.setTxnDTTime("20230825143413");
response.setPaymentScheme("MC");
Gson gson = new Gson();
String jsonStr = gson.toJson(response);
byte[] messageBytes = jsonStr.getBytes();

步骤 5:使用消息字节更新签名

signature.update(messageBytes);

步骤 6:将 signedMessage 转换为字节并进行验证

boolean verified = signature.verify(signedMessageBytes);