`
y806839048
  • 浏览: 1120952 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

加签,验签

阅读更多

 

一般安全考虑,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软加签验签的核心...

    招行一网通支付 加签验签工具类

    招行一网通支付 加签验签工具类 提供给做支付的小伙伴

    java SHA256withRSA,json数据证书加签验签

    这个"JAVA-SHA256withRSA.java"文件提供了一个完整的工具类RSAUtils,包含了加签、验签、公钥加密和私钥解密的功能。以下是关于这些知识点的详细解释: 1. **签名(Signing)**: 使用SHA256withRSA进行签名是将...

    C# 实现与JAVA互通 加签/验签,RSA加密/解密

    * RSA数字签名-俗称加签验签:私钥加签,公钥验签。  * RSA加密解密:私钥解密,公钥加密。 * RSA数字签名-俗称加签验签:私钥加签,公钥验签。  * RSA加密解密:私钥解密,公钥加密。 * RSA数字签名-俗称加...

    179海关接口.net加签验签实例

    1.申请测试环境 2.修改179report.cs最下面的参数: public static CustomsReportSetting Current = new CustomsReportSetting() { CertNo = "", CertFilePath = "/cert/cert.cer", CertPassword = "", ...

    rsa加签验签

    因为工作需要,在项目中使用rsa验签,所以在网上找了找,因为要和java互通,所以网上找的都不能用,所以就自己改了...所有加签、加密返回结果都是base64的。 http://blog.csdn.net/u013608482/article/details/79484283

    RSA sha-256加密解密,加签验签工具类

    5. **验签操作**:`verifySignature()`方法会检查给定的签名是否与使用公钥重新计算的哈希值匹配。它首先用公钥解密签名,得到原始的SHA-256哈希,然后对比这个哈希值是否与原始数据计算出的哈希相同。 在实际应用...

    RSA加密解密签名加签验签RsaUtils工具类

    RSA加密解密签名加签验签RsaUtils工具类 RSA算法基于大数因子分解难题,提供了公钥加密和私钥解密的能力。公钥用于加密,私钥则负责解密。这种特性使得RSA成为保证数据传输安全的理想选择。 公钥加密私钥解密与...

    RSA和MD5加解密和加签验签案例 #资源达人分享计划#

    本文将深入探讨RSA和MD5两种加密算法,以及它们在加解密和加签验签中的应用。这些技术是保障网络安全的重要工具,尤其适用于对数据安全性有较高要求的开发者。 首先,RSA是一种非对称加密算法,由Ron Rivest、Adi ...

    多线程加签验签例子.zip

    本示例“多线程加签验签例子”着重于如何在多线程环境下进行数字签名的生成和验证,这对于理解并发处理和安全通信机制具有重要意义。 首先,多线程是计算机程序设计中的一个重要概念,它允许一个应用程序同时执行多...

    RSA体系 c++/java相互进行加签验签

    RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,广泛应用于网络安全领域,如数据传输加密、数字签名等。本主题主要关注使用C++和...通过正确实现和适当地编码转换,可以在C++和Java之间无缝地进行加签验签操作。

    Crptopp加密解密加签验签

    3,验证签名目前使用的UTF8格式,加签和验签必须保持统一,私钥加密,公钥解密。 4,静态库分release版本和debug版本 5,注意VC6.0中编译的使用的环境 MDd 还是MD 工程环境和静态库环境一直 6,本工程使用的库为:...

    java(sm2公私钥生成、加签、验签、加密、解密)

    java(sm2公私钥生成、加签、验签、加密、解密)demo案列

    国密SM2_SM3加密解密,加签验签操作C#源码

    国密SM2_SM3加密解密,加签验签操作C#源码,网络上很难找的资源,实现了密SM2_SM3加密解密,加签验签操作,.NET版

    国密SM2-SM3加密解密,加签验签操作C#源码 复刻Java

    国密SM2_SM3加密解密,加签验签操作C#源码 复刻Java 完整有效

    加签加密解密验签demo

    在IT行业中,加签、加密、解密以及验签是网络安全和数据保护的重要环节,尤其在数据传输过程中,确保信息的完整性和机密性至关重要。本示例"加签加密解密验签demo"旨在演示如何实现这一过程,通常涉及对称加密、非...

    php对接java现实加签验签的实例

    在IT行业中,尤其是在分布式系统和跨平台通信中,加签验签是确保数据安全和完整性的关键步骤。本文将详细讲解如何使用PHP对接Java进行加签验签的实例。 首先,我们要理解加签(Signing)和验签(Verifying ...

Global site tag (gtag.js) - Google Analytics