`

使用java rsa 签名和验签,生成私钥和公钥

阅读更多
package com.twodfire.alipay.utils;


import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import java.security.*;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Map;
import java.util.SortedMap;

/**
 * Created by Administrator on 2015/12/25.
 */
public class RsaCipherHelper {
    private static final String GOUQI_PRIVATE_KEY = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAIodOSS4fXlvWYrgJdOCeLhBCsei" +
            "CBaYqolfdViVCIETXJWQovUf1qRUtFyUaO4uh/2I0zx125MWA/Nr8Lz3iRSm2MfA62aON019Qsl8" +
            "iAztT3a3Qe9duavhrNqyILX+QMyOIuHHHObD0ChbgsuBINrJ2OttDH+LP7Wss3kO4eMdAgMBAAEC" +
            "gYAUmIkF9dEYQ8eZkxVw9hrkdyaRYJNOM1PzCl4oaIkNHoMG9rumTCoo9Uy0JZmEM0IqR7YgZP7q" +
            "bzUFnsoWk99IESL98WnEZg+ze7xQdv0fwPA1c43MhzD+i1a0LWPS10HlO+M7PfQyWWguHa3os+aQ" +
            "DSyYrHg6M+e6tkh4X7yf7QJBAODPtGe0F7XtXKVwvO+lnEzYw7mKhEsB6Rtz/bV/AVRsmT4ahnnb" +
            "dCFvyyInEZ56faJyxjVhdB85TZ29ESHl9VcCQQCdRmvZePTlpT2vxjQswtRtOlzekIRgm19vgu2X" +
            "foUyVgISiqvl0+uPHAju9wYkkyNm001l9OVU5uo+0LiMHc6rAkAL28j3Y2+QwCmP7Id62LCK+TAx" +
            "3FWoIzypnw+2ADIQwv2+YeXQDbxtexkq/waV5n40EHvWGwLmFr66YFvD/v5XAkA2CneOf2Bu9Etw" +
            "9YMCCmQhsBcvJqtF4r11PKDVGFU+SY1mv513WE0tnG15ZwoGUUSt1VdX/EE822fT87Yl9ywHAkBG" +
            "7hb76FMfc9dXXxMSxeP+HVk0M6BW0GCNZWp2xE6yYxLvesy1IeLUOrsHjhd6JhvUc0+Ym91F7kNn" +
            "aXqPCDRd";

    private static final String GOUQI_PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCKHTkkuH15b1mK4CXTgni4QQrHoggWmKqJX3VY" +
            "lQiBE1yVkKL1H9akVLRclGjuLof9iNM8dduTFgPza/C894kUptjHwOtmjjdNfULJfIgM7U92t0Hv" +
            "Xbmr4azasiC1/kDMjiLhxxzmw9AoW4LLgSDaydjrbQx/iz+1rLN5DuHjHQIDAQAB";

    /**
     * 生成签名
     *
     * @param content
     * @param privateKey
     * @return
     */
    public static String sign(String content, String privateKey) {
        return sign(content, str2PrivateKey(privateKey));
    }

    /**
     * 验证签名
     *
     * @param content
     * @param publicKey
     * @return
     */
    public static boolean verify(String content, String sign, String publicKey) {
        return verify(content, sign, str2PublicKey(publicKey));
    }

    /**
     * @param content
     * @param privateKey
     * @return
     */
    public static String sign(String content, RSAPrivateKey privateKey) {
        try {
            Signature signature = Signature.getInstance("SHA1withRSA");
            signature.initSign(privateKey);
            signature.update(content.getBytes("utf-8"));
            return new BASE64Encoder().encode(signature.sign());
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * @param content
     * @param publicKey
     * @return
     */
    public static boolean verify(String content, String sign, RSAPublicKey publicKey) {
        try {
            Signature signature = Signature.getInstance("SHA1withRSA");
            signature.initVerify(publicKey);
            signature.update(content.getBytes("utf-8"));
            return signature.verify((new BASE64Decoder()).decodeBuffer(sign));
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    public static RSAPublicKey str2PublicKey(String publicKeyPerm) {
        try {
            X509EncodedKeySpec keySpec = new X509EncodedKeySpec((new BASE64Decoder()).decodeBuffer(publicKeyPerm));
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
            return (RSAPublicKey) keyFactory.generatePublic(keySpec);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    public static RSAPrivateKey str2PrivateKey(String privateKeyPerm) {
        try {
            PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec((new BASE64Decoder()).decodeBuffer(privateKeyPerm));
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
            return (RSAPrivateKey) keyFactory.generatePrivate(keySpec);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 将所有POST 参数(sign除外)进行字典排序,组成字符串, 然后使用私钥产生签名
     * @param params
     * @return sign
     */
    public static String encodeParams(SortedMap<?, ?> params, String privateKey) {
        StringBuilder sb = new StringBuilder();
        for (Map.Entry<?, ?> entry : params.entrySet()) {
            sb.append(entry.getKey())
                    .append("=")
                    .append(entry.getValue())
                    .append("&");
        }

        sb.deleteCharAt(sb.length() - 1);
        return sign(sb.toString(), privateKey);
    }

    public static void main2(String[] args) throws Exception {

        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        keyPairGenerator.initialize(1024);
        KeyPair keyPair = keyPairGenerator.genKeyPair();
        PublicKey publicKey = keyPair.getPublic();
        PrivateKey privateKey = keyPair.getPrivate();

        BASE64Encoder base64Encoder = new BASE64Encoder();
        System.out.println("-------------------public key----------------------");
        System.out.println(base64Encoder.encode(publicKey.getEncoded()));
        System.out.println("-------------------private key---------------------");
        System.out.println(base64Encoder.encode(privateKey.getEncoded()));

    }

    public static void main3(String[] args) {
        String publicKey = GOUQI_PUBLIC_KEY;
        String privateKey = GOUQI_PRIVATE_KEY;

        String appPrivateKey = "MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAN0yqP" +
                "kLXlnhM+2H/57aHsYHaHXazr9pFQun907TMvmbR04wHChVsKVgGUF1hC0FN" +
                "9hfeYT5v2SXg1WJSg2tSgk7F29SpsF0I36oSLCIszxdu7ClO7c22mxEVuCj" +
                "mYpJdqb6XweAZzv4Is661jXP4PdrCTHRdVTU5zR9xUByiLSVAgMBAAECgYEAh" +
                "znORRonHylm9oKaygEsqQGkYdBXbnsOS6busLi6xA+iovEUdbAVIrTCG9t854" +
                "z2HAgaISoRUKyztJoOtJfI1wJaQU+XL+U3JIh4jmNx/k5UzJijfvfpT7Cv3ueM" +
                "tqyAGBJrkLvXjiS7O5ylaCGuB0Qz711bWGkRrVoosPM3N6ECQQD8hVQUgnHEVH" +
                "ZYtvFqfcoq2g/onPbSqyjdrRu35a7PvgDAZx69Mr/XggGNTgT3jJn7+2XmiGkH" +
                "M1fd1Ob/3uAdAkEA4D7aE3ZgXG/PQqlm3VbE/+4MvNl8xhjqOkByBOY2ZFfWKh" +
                "lRziLEPSSAh16xEJ79WgY9iti+guLRAMravGrs2QJBAOmKWYeaWKNNxiIoF7/4" +
                "VDgrcpkcSf3uRB44UjFSn8kLnWBUPo6WV+x1FQBdjqRviZ4NFGIP+KqrJnFHzN" +
                "gJhVUCQFzCAukMDV4PLfeQJSmna8PFz2UKva8fvTutTryyEYu+PauaX5laDjyQ" +
                "bc4RIEMU0Q29CRX3BA8WDYg7YPGRdTkCQQCG+pjU2FB17ZLuKRlKEdtXNV6zQ" +
                "FTmFc1TKhlsDTtCkWs/xwkoCfZKstuV3Uc5J4BNJDkQOGm38pDRPcUDUh2/";

        String sign = sign("jackiezhi", appPrivateKey);
        System.out.println(sign);
        //System.out.println(verify("jackiezhi", sign, publicKey));


    }

}
分享到:
评论

相关推荐

    Java实现RSA生成公钥私钥

    在Java中实现RSA公钥和私钥的生成,通常我们会使用Java Cryptography Extension (JCE) 提供的API,如`java.security.KeyPairGenerator`类。但是,根据你的描述,这里提供的代码是不直接依赖API,而是通过数学计算来...

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

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

    RSA生成公钥私钥和使用公钥私钥加密解密demo

    本示例提供了一个RSA加密工具类,用于生成公钥和私钥,并使用它们进行加密和解密操作,这对于保护数据库中的敏感信息,如密码,是非常必要的。 1. **RSA算法原理**: RSA算法基于数论中的大数因子分解难题。其基本...

    RSA签名验签工具windows_V1.4.zip_rsa_rsa2生成签名_rsa签名工具_工具_验签

    RSA签名验签工具是用于处理数字签名的一种实用软件,尤其在网络安全和电子商务中扮演着重要角色。这个名为“RSA签名验签工具windows_V1.4.zip”的压缩包包含了一个适用于Windows操作系统的工具,版本为V1.4,专门...

    C# .net版 RSA 公钥加密私钥解密 私钥加密公钥解密

    本教程主要讲解如何在C# .NET环境中使用RSA进行公钥加密和私钥解密,以及私钥加密和公钥解密的操作。 首先,让我们了解RSA的基本原理。RSA算法基于两个大素数的乘积,这个乘积作为公钥,而这两个大素数作为私钥。...

    RSA签名验签工具

    RSA签名验签工具是安全支付领域中不可或缺的一部分,主要用于确保数据传输的安全性和完整性。这个工具支持RSA和RSA2算法,以及MD5哈希算法,能够帮助开发者生成验证密钥对,进行签名和验签操作。在本文中,我们将...

    RSA算法JAVA公钥加密,C#私钥解密

    在这个示例中,"RSA加密"的压缩包可能包含了Java和C#的完整源代码,用于演示如何在两者之间实现RSA公钥加密和私钥解密的过程。开发者可以通过运行这些示例代码,理解并应用RSA加密解密技术到自己的项目中。

    标准RSA签名验签工具

    1. **私钥签名**:发送者使用自己的RSA私钥对消息的哈希值进行加密,生成的密文就是数字签名。这个过程确保只有拥有私钥的人才能生成签名,增加了安全性。 2. **消息与签名一起发送**:发送者将原始消息和生成的...

    签名RSA验签工具

    在本场景中,"签名RSA验签工具"是指一个用于进行RSA签名和验证的软件工具,它可以帮助用户生成私钥和公钥,并且执行签名和验证过程。 私钥是RSA算法中的一个重要组成部分,它由用户保密,用于对数据进行解密或生成...

    Windows版 生成RSA公钥和私钥的工具

    本文将详细讲解如何在Windows操作系统上利用OpenSSL工具生成RSA公钥和私钥。 首先,OpenSSL是一个强大的安全套接字层密码库,包含各种主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供丰富的应用...

    JavaRSA生成公钥私钥加解密

    首先,生成RSA的公钥和私钥是通过`java.security.KeyPairGenerator`类完成的。以下是一个简单的步骤: 1. 导入必要的库: ```java import java.security.KeyPair; import java.security.KeyPairGenerator; import ...

    RSA加密签名验签工具

    而在签名验签功能中,发送方使用私钥对数据进行签名,接收方通过验证公钥和签名来确认数据的完整性和发送者的身份。这对于防止数据篡改和中间人攻击至关重要。 这款RSA签名验签工具的Windows版本V1.3可能包含了以下...

    C# RSA加密、解密、加签、验签、支持JAVA格式公钥私钥、PEM格式公钥私钥、.NET格式公钥私钥

    C# RSA加密、解密、加签、验签、支持JAVA格式公钥私钥、PEM格式公钥私钥、.NET格式公钥私钥 对应文章: http://blog.csdn.net/gzy11/article/details/54573973

    .net与java中的互操作(rsa签名与验签、加密与解密)

    在这个场景下,我们将探讨如何在.NET环境中使用C#进行RSA签名和解密,以及在Java环境中进行RSA验证和加密。 首先,让我们关注.NET中的RSA签名。在C#中,我们可以使用`System.Security.Cryptography....

    RSA签名验签工具windows

    总的来说,"RSA签名验签工具windows"是一个实用的工具,为用户提供了一站式的RSA加密操作,包括密钥对的生成、签名和验证,以及密钥对的检验,对于进行安全通信和数据保护的用户来说,是非常有价值的工具。...

    java RSA私钥转.net私钥(.net版)

    C#中RSA公钥和私钥的格式都是XML的,而在其他语言如java中,生成的RSA密钥就是普通的Base64字符串,所以需要将C#xml格式的密钥转换成普通的Base64字符串,同时也要实现Base64密钥字符串生成C#中xml格式的密钥.有些java的...

    支付宝RSA签名验签工具windows_V1.4

    使用此工具,开发者可以在本地生成一对RSA密钥,包括一个公钥和一个私钥。公钥将提交给支付宝,用于后续的验签过程;私钥则由开发者保管,用于签名交易数据。生成密钥对的过程是安全的,因为私钥不会离开开发者的...

    mbedtls RSA PSS加密验签.pdf

    RSA是一种广泛使用的非对称加密算法,其中公钥用于加密或验证签名,私钥用于解密或生成签名。4096位指的是密钥长度,这个长度意味着安全性更高,因为破解这样长度的密钥所需的计算资源会非常庞大。 PSS是一种数字...

    Java 公钥和私钥加密解密代码

    以下是一个简单的Java代码示例,演示了如何生成公钥和私钥对,并使用它们进行加密和解密: ```java import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; ...

    Java 实现RSA 签名/验签与加密解密

    - 签名:使用私钥对数据进行签名,通过`Signature`类的`initSign(PrivateKey)`初始化,然后调用`update()`方法处理待签名的数据,最后调用`sign()`方法生成签名。 - 验签:使用公钥对签名进行验证,通过`Signature...

Global site tag (gtag.js) - Google Analytics