`
zeeeitch
  • 浏览: 85518 次
  • 性别: Icon_minigender_1
  • 来自: 九江
社区版块
存档分类
最新评论

java rsa算法

    博客分类:
  • java
阅读更多
rsa算法中的公钥是 modulus+publicExponent publicExponent一般是65537 0x10001
私钥是:modulus+privateExponent

一个项目需要从加密狗中读取公钥,与证书中公钥格式不同,他是最原始的公钥格式,publicExponent 为0x10001用驱动可读出modulus。

为了在java中用公钥加解密,采用了java包:
<dependency>
            <groupId>bouncycastle</groupId>
            <artifactId>bcprov-jdk16</artifactId>
            <version>136</version>
</dependency>


这个东西在编辑器中始终无法使用,放在独立的tomcat可以用。
下面是java加密代码。

 

        String encryptText = "li79b3NwrCAU2e4ba/4jFQPG20YAOl1mzxyIgbujM12Iu5p3myA/cN/WysSdadUj6fGCL2tQ06Z6RsDaJ4z6RHaEBkoeJCyRBDx+N86tnnhHx0k42+nPJnUqvUX4j36yXvqJxUoz8p2EjsdT+MwMGLfaAlEPga6txhPewOwBZxk=";
        byte[] privateExponent = {(byte) 0x6c,……我的私钥,保密:)};
        byte[] modulus = {(byte) 0x00, (byte) 0x9A, (byte) 0xCD, (byte) 0x59, (byte) 0x2C, (byte) 0x74, (byte) 0x07, (byte) 0x48, (byte) 0x79, (byte) 0x05, (byte) 0x07, (byte) 0xC5, (byte) 0x37, (byte) 0x9C, (byte) 0x56, (byte) 0x97,
                (byte) 0xFA, (byte) 0xF6, (byte) 0xBC, (byte) 0x90, (byte) 0x70, (byte) 0x84, (byte) 0x6F, (byte) 0x26, (byte) 0xFB, (byte) 0x90, (byte) 0x15, (byte) 0xE9, (byte) 0x1B, (byte) 0x4A, (byte) 0x15, (byte) 0xFE,
                (byte) 0x74, (byte) 0x58, (byte) 0xD0, (byte) 0x45, (byte) 0x5B, (byte) 0x48, (byte) 0x00, (byte) 0xDF, (byte) 0xA4, (byte) 0x9B, (byte) 0x82, (byte) 0x72, (byte) 0xC4, (byte) 0x6D, (byte) 0x25, (byte) 0xFC,
                (byte) 0xE2, (byte) 0x91, (byte) 0x1E, (byte) 0xFD, (byte) 0x4C, (byte) 0xCC, (byte) 0x6E, (byte) 0x1D, (byte) 0xFD, (byte) 0xF8, (byte) 0x2B, (byte) 0xBB, (byte) 0xCE, (byte) 0xA3, (byte) 0x99, (byte) 0xB6,
                (byte) 0xF1, (byte) 0xBE, (byte) 0x57, (byte) 0xD2, (byte) 0x6B, (byte) 0x51, (byte) 0xF5, (byte) 0x03, (byte) 0xFB, (byte) 0x98, (byte) 0xF2, (byte) 0x74, (byte) 0x17, (byte) 0xD3, (byte) 0x6D, (byte) 0x16,
                (byte) 0x74, (byte) 0x61, (byte) 0x48, (byte) 0x24, (byte) 0x6B, (byte) 0x68, (byte) 0x11, (byte) 0xB2, (byte) 0x72, (byte) 0xBD, (byte) 0x86, (byte) 0xA0, (byte) 0x0A, (byte) 0x6C, (byte) 0x71, (byte) 0x08,
                (byte) 0xF9, (byte) 0xC1, (byte) 0x3B, (byte) 0x8E, (byte) 0x4B, (byte) 0x70, (byte) 0x1B, (byte) 0x74, (byte) 0x97, (byte) 0xEA, (byte) 0xB7, (byte) 0x84, (byte) 0xDD, (byte) 0x3C, (byte) 0xD6, (byte) 0x91,
                (byte) 0xDD, (byte) 0xB3, (byte) 0xE7, (byte) 0x59, (byte) 0x32, (byte) 0x04, (byte) 0x7A, (byte) 0x00, (byte) 0xCB, (byte) 0x1E, (byte) 0x60, (byte) 0xF5, (byte) 0xB5, (byte) 0x51, (byte) 0xC4, (byte) 0x98,
                (byte) 0xB1};

        RSAPrivateKey PrivateKey = encrypt.generateRSAPrivateKey(modulus, privateExponent);
        Base64 base64 = new Base64();
        byte[] text = base64.decode(encryptText.getBytes());
        byte[] e = encrypt.decrypt(PrivateKey , text);



 protected byte[] decrypt(RSAPrivateKey privateKey, byte[] obj) throws Exception {
        if (privateKey != null) {
//            try {
            Cipher cipher = Cipher.getInstance("RSA");
            cipher.init(Cipher.DECRYPT_MODE, privateKey);
            return cipher.doFinal(obj);
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
        }

        return null;
    }

    protected RSAPublicKey generateRSAPublicKey(byte[] modulus, byte[] publicExponent) throws RuntimeException {
        KeyFactory keyFac = null;
        try {
            keyFac = KeyFactory.getInstance("RSA", new BouncyCastleProvider());
        } catch (NoSuchAlgorithmException ex) {
            throw new RuntimeException(ex.getMessage());
        }

        RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(new BigInteger(modulus), new BigInteger(publicExponent));
        try {
            return (RSAPublicKey) keyFac.generatePublic(pubKeySpec);
        } catch (InvalidKeySpecException ex) {
            throw new RuntimeException(ex.getMessage());
        }
    }

    protected RSAPrivateKey generateRSAPrivateKey(byte[] modulus, byte[] privateExponent) throws RuntimeException {
        KeyFactory keyFac = null;
        try {
            keyFac = KeyFactory.getInstance("RSA", new BouncyCastleProvider());
        } catch (NoSuchAlgorithmException ex) {
            throw new RuntimeException(ex.getMessage());
        }

        RSAPrivateKeySpec priKeySpec = new RSAPrivateKeySpec(new BigInteger(modulus), new BigInteger(privateExponent));
        try {
            return (RSAPrivateKey) keyFac.generatePrivate(priKeySpec);
        } catch (InvalidKeySpecException ex) {
            throw new RuntimeException(ex.getMessage());
        }
    }

分享到:
评论

相关推荐

    非对称加密算法:RSA算法的C++实现与Java实现

    本篇将深入探讨RSA算法的理论基础及其在C++和Java两种编程语言中的实现。 RSA算法的基本思想是基于两个大素数的乘积。两个大素数只有两个较小的因子1和自身,但找到这两个因子对于大整数来说极其困难。因此,RSA...

    Java RSA算法

    Java RSA算法加密解密,用JAVA编写的RSA.其中包括利用私钥进行解密,利用公钥进行加密,生成密钥对,以及测试数据。

    浅析用Java编程实现RSA算法的过程.pdf

    Java是一种广泛应用于网络编程领域的编程语言,而RSA算法是一种公钥密码体制,在信息安全领域占据重要地位。本文将深入探讨如何使用Java语言实现RSA加密算法的过程,以及Java语言的发展历程和特点。 Java语言...

    rsa.java.rar_RSA algorithm java_RSA.java_RSA算法_java RSA_rsa java

    这个RAR压缩包提供的是一个Java实现的RSA算法示例,名为"rsa.java",适合开发者参考学习。 RSA算法的核心原理是基于两个大素数的乘积难以分解这一数学难题。它涉及到以下几个关键概念: 1. **公钥与私钥**:RSA...

    JAVA RSA 加密算法 RSA.java

    JAVA RSA 加密算法 RSA.java RSA公钥加解密,RSA私钥加解密,MD5withRSA 签名 MD5withRSA签名较验

    Rsa.rar_RSA 算法_java 非对称 加密 算法_rsa java

    这个RAR压缩包包含了一个名为“Rsa.java”的源代码文件,可能是用于演示如何在Java环境中实现RSA算法。另一个文件“www.pudn.com.txt”可能是辅助资料,可能包含了关于算法的解释或者是一些额外的说明。 RSA算法由...

    用Java实现RSA算法

    在Java中实现RSA算法,我们需要了解几个关键概念:公钥、私钥、模数、指数以及Java的Cipher类。 1. **RSA算法原理**: RSA的名字来源于它的发明者Ron Rivest、Adi Shamir和Leonard Adleman。该算法基于大整数因子...

    java rsa加密算法实现

    1. **RSA原理**:RSA算法基于数论中的大数因子分解难题,由两个大素数P和Q相乘得到N,然后计算N的欧拉函数φ(N) = (P-1) * (Q-1),选取一个与φ(N)互质的整数E作为公钥的加密指数,再计算E关于φ(N)的模逆数D作为...

    RSA.rar_RSA算法_rsa_rsa java_rsa java_算法

    下面将详细介绍RSA算法的核心原理、工作流程及其在Java中的实现。 RSA算法基于数论中的两个基本概念:大整数分解和欧拉函数。其主要思想是,选取两个大素数p和q,它们的乘积n=p*q非常大,且难以分解。然后计算n的...

    RSA实现算法报告关于RSA算法的实现代码

    ### RSA算法实现报告 #### 实验环境 - **硬件配置**:处理器:Intel(R) Core(TM) i5-2430M CPU @ 2.40GHz (4CPUs), ~2.4GHz;内存:2048MB RAM - **软件工具**: - 操作系统:Windows 7 旗舰版 - 开发工具:...

    RSA算法的Java实现

    在Java中实现RSA算法,我们需要使用Java Cryptography Extension (JCE)框架。JCE提供了一系列接口和类,如Cipher、KeyPairGenerator、KeyPair等,用于处理各种加密和解密操作。以下是对RSA算法在Java中实现的详细...

    java实现RSA算法(代码)

    在Java中实现RSA算法,主要涉及到`java.security`和`javax.crypto`这两个包中的类。 1. **RSA算法原理** RSA算法的核心是欧拉定理和费马小定理。两个大素数p和q相乘得到n=p*q,计算φ(n)=(p-1)*(q-1),然后选取一...

    密码学RSA算法实现代码

    Java实现RSA算法时,通常会用到`java.security`和`javax.crypto`这两个包中的类。模的重复平方算法(也称为快速幂运算)用于高效地计算大整数的幂,而中国剩余定理(Chinese Remainder Theorem, CRT)则在某些情况下...

    RSA算法JAVA版

    这是用JAVA编写的RSA算法,功能比较完整,不过注意支持的数字不能太大。

    Java实现的RSA加密解密算法示例

    RSA算法基于大数分解难题的原理,使用公钥加密、私钥解密的方式实现信息的加密和解密。 知识点2:Java中RSA加密解密算法的实现 在Java中,可以使用Java Cryptography Architecture(JCA)来实现RSA加密解密算法。...

    RSA加密算法实现以及C#与java互通加解密

    为了实现C#与Java之间的互通加解密,需要确保两边使用的RSA算法实现一致,包括密钥生成、填充算法及加密解密的具体实现。 - **密钥一致性**:确保C#与Java生成的公私钥对相同。 - **填充算法一致性**:两边都应采用...

    java实现RSA算法

    在Java中实现RSA算法,主要涉及到`java.security`和`javax.crypto`这两个包中的类和接口。下面将详细介绍如何在Java中实现RSA算法,并提供相关的源码解析。 一、RSA算法原理 RSA算法基于两个大素数的乘积难以分解的...

    java,RSA算法加密文件

    Java中的RSA算法是一种广泛使用的非对称加密技术,它的全称是Rivest-Shamir-Adleman,由三位密码学专家在1977年提出。这种算法基于大整数因子分解的数学难题,提供了相对较高的安全性。在Java中,我们可以利用`java....

    RSA算法之大数实现

    java利用大整数类实现的一个RSA加解密签名过程。

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

    RSA算法是一种非对称加密技术,它在信息安全领域扮演着重要的角色。非对称加密与对称加密的主要区别在于,它使用两个不同的密钥:一个公钥用于加密,另一个私钥用于解密。RSA的名字来源于它的发明者Ron Rivest、Adi ...

Global site tag (gtag.js) - Google Analytics