一般安全考虑,1,验签--签名,2,解密---加密
加签:签名原文,私钥,签名工具类生成签名--base64转化一次(不是非对称加密,是jdk专门的验,加签方法)
签名:
String sign = Sign256lcUtil.generateSign(responseResult.getBizContent(), REQUEST_ID, privateKeyValue, responseResult.getSessionId());
public static String generateSign(String encrptyJson,String REQUEST_ID,String REQ_PRIVATE_KEY, String sessionId) throws Exception {
// 获取待签名字符串
String origSign = getOrigSign(sessionId,REQUEST_ID,encrptyJson);
// 使用SHA256withRSA算法生成签名
// 第二个参数为base64编码rsa密钥, 第三个参数为待签名串
// 结果返回base64编码签名
String sign = DigitalSignatureUtil.sign(EnumSignatureAlgorithm.SHA256withRSA, REQ_PRIVATE_KEY, origSign);
return sign;
}
一般签名之后的字节码会base64:
public static String sign(EnumSignatureAlgorithm signatureAlgorithm, String strPrivateKey, String strData) throws Exception {
byte[] bytes = sign(signatureAlgorithm, Base64Util.decode2Bytes(strPrivateKey), strData.getBytes("utf-8"));
return Base64Util.encode2Str(bytes, "utf-8");
}
public static byte[] sign(EnumSignatureAlgorithm signatureAlgorithm, byte[] bytePrivateKey, byte[] byteData) throws Exception {
Security.addProvider(new BouncyCastleProvider());
PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(bytePrivateKey);
KeyFactory keyFactory = KeyFactory.getInstance(signatureAlgorithm.getKeyAlgorithm().name());
PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
return sign(signatureAlgorithm, privateKey, byteData);
}
验签: 加签原文,与对方传过来的签名(对方私钥签名),在公钥的参数下,通过验签已有的工具类换算是否一致
Sign256lcUtil.verifySignReq(baseResp,REQUEST_ID,AESKeyValue,publicKeyValue);
public static void verifySign(BaseResp response ,String REQUEST_ID,String AES_KEY, String XR_PUBLIC_KEY) throws Exception {
try {
if (StringUtils.isBlank(response.getSign())) {
System.out.println("返回签名信息为空");
}
// 生成签名原文
String origStr = getOrigSign(response.getSessionId(),REQUEST_ID, (String) (response.getBizContent()));
// SHA256withRSA算法验签, 第二个参数为base64编码的星融公钥, 第三个参数为utf8签名原文,
// 第四个参数为接口返回的base64编码签名,
boolean flag = DigitalSignatureUtil.verify(EnumSignatureAlgorithm.SHA256withRSA, XR_PUBLIC_KEY, origStr,
response.getSign());
if (!flag) {
System.out.println("签名验证异常");
}
// 解密报文体
// 接口请求成功解密报文体
if ("0000".equals(response.getResultCode())) {
String resposneStr = CipherUtil.decrypt(EnumCipherAlgorithm.AES_ECB_PKCS5Padding, AES_KEY,
(String) response.getBizContent());
System.out.println("解密后报文:[{}]" + resposneStr);
response.setBizContent(resposneStr);
}
} catch (Exception e) {
System.out.println("返回报文签名验证过程异常");
throw new Exception("返回报文签名验证过程异常", e);
}
}
public static boolean verify(EnumSignatureAlgorithm signatureAlgorithm, String strPublicKey, String origStr, String signStr) throws Exception {
return verify(signatureAlgorithm, Base64Util.decode2Bytes(strPublicKey), origStr.getBytes("utf-8"), Base64Util.decode2Bytes(signStr, "utf-8"));
}
public static boolean verify(EnumSignatureAlgorithm signatureAlgorithm, byte[] bytePublicKey, byte[] byteData, byte[] byteSign) throws Exception {
Security.addProvider(new BouncyCastleProvider());
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(bytePublicKey);
KeyFactory keyFactory = KeyFactory.getInstance(signatureAlgorithm.getKeyAlgorithm().name());
PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
return verify(signatureAlgorithm, publicKey, byteData, byteSign);
}
相关推荐
临商银行接口对接,加密解密加签验签整合,方便调用 临商银行接口对接,加密解密加签验签整合,方便调用 临商银行接口对接,加密解密加签验签整合,方便调用 临商银行接口对接,加密解密加签验签整合,方便调用 临商...
在Java开发中,软加签验签是一种常见的用于保障数据安全的技术,特别是在金融行业的二代银行系统中。这种技术主要用于防止数据被篡改、确保信息的完整性和验证消息发送者的身份。下面将详细介绍Java软加签验签的核心...
招行一网通支付 加签验签工具类 提供给做支付的小伙伴
这个"JAVA-SHA256withRSA.java"文件提供了一个完整的工具类RSAUtils,包含了加签、验签、公钥加密和私钥解密的功能。以下是关于这些知识点的详细解释: 1. **签名(Signing)**: 使用SHA256withRSA进行签名是将...
* RSA数字签名-俗称加签验签:私钥加签,公钥验签。 * RSA加密解密:私钥解密,公钥加密。 * RSA数字签名-俗称加签验签:私钥加签,公钥验签。 * RSA加密解密:私钥解密,公钥加密。 * RSA数字签名-俗称加...
1.申请测试环境 2.修改179report.cs最下面的参数: public static CustomsReportSetting Current = new CustomsReportSetting() { CertNo = "", CertFilePath = "/cert/cert.cer", CertPassword = "", ...
因为工作需要,在项目中使用rsa验签,所以在网上找了找,因为要和java互通,所以网上找的都不能用,所以就自己改了...所有加签、加密返回结果都是base64的。 http://blog.csdn.net/u013608482/article/details/79484283
5. **验签操作**:`verifySignature()`方法会检查给定的签名是否与使用公钥重新计算的哈希值匹配。它首先用公钥解密签名,得到原始的SHA-256哈希,然后对比这个哈希值是否与原始数据计算出的哈希相同。 在实际应用...
RSA加密解密签名加签验签RsaUtils工具类 RSA算法基于大数因子分解难题,提供了公钥加密和私钥解密的能力。公钥用于加密,私钥则负责解密。这种特性使得RSA成为保证数据传输安全的理想选择。 公钥加密私钥解密与...
本文将深入探讨RSA和MD5两种加密算法,以及它们在加解密和加签验签中的应用。这些技术是保障网络安全的重要工具,尤其适用于对数据安全性有较高要求的开发者。 首先,RSA是一种非对称加密算法,由Ron Rivest、Adi ...
本示例“多线程加签验签例子”着重于如何在多线程环境下进行数字签名的生成和验证,这对于理解并发处理和安全通信机制具有重要意义。 首先,多线程是计算机程序设计中的一个重要概念,它允许一个应用程序同时执行多...
RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,广泛应用于网络安全领域,如数据传输加密、数字签名等。本主题主要关注使用C++和...通过正确实现和适当地编码转换,可以在C++和Java之间无缝地进行加签验签操作。
3,验证签名目前使用的UTF8格式,加签和验签必须保持统一,私钥加密,公钥解密。 4,静态库分release版本和debug版本 5,注意VC6.0中编译的使用的环境 MDd 还是MD 工程环境和静态库环境一直 6,本工程使用的库为:...
java(sm2公私钥生成、加签、验签、加密、解密)demo案列
国密SM2_SM3加密解密,加签验签操作C#源码,网络上很难找的资源,实现了密SM2_SM3加密解密,加签验签操作,.NET版
国密SM2_SM3加密解密,加签验签操作C#源码 复刻Java 完整有效
在IT行业中,加签、加密、解密以及验签是网络安全和数据保护的重要环节,尤其在数据传输过程中,确保信息的完整性和机密性至关重要。本示例"加签加密解密验签demo"旨在演示如何实现这一过程,通常涉及对称加密、非...
在IT行业中,尤其是在分布式系统和跨平台通信中,加签验签是确保数据安全和完整性的关键步骤。本文将详细讲解如何使用PHP对接Java进行加签验签的实例。 首先,我们要理解加签(Signing)和验签(Verifying ...