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算法的基本思想是基于两个大素数的乘积。两个大素数只有两个较小的因子1和自身,但找到这两个因子对于大整数来说极其困难。因此,RSA...
Java RSA算法加密解密,用JAVA编写的RSA.其中包括利用私钥进行解密,利用公钥进行加密,生成密钥对,以及测试数据。
Java是一种广泛应用于网络编程领域的编程语言,而RSA算法是一种公钥密码体制,在信息安全领域占据重要地位。本文将深入探讨如何使用Java语言实现RSA加密算法的过程,以及Java语言的发展历程和特点。 Java语言...
这个RAR压缩包提供的是一个Java实现的RSA算法示例,名为"rsa.java",适合开发者参考学习。 RSA算法的核心原理是基于两个大素数的乘积难以分解这一数学难题。它涉及到以下几个关键概念: 1. **公钥与私钥**:RSA...
JAVA RSA 加密算法 RSA.java RSA公钥加解密,RSA私钥加解密,MD5withRSA 签名 MD5withRSA签名较验
这个RAR压缩包包含了一个名为“Rsa.java”的源代码文件,可能是用于演示如何在Java环境中实现RSA算法。另一个文件“www.pudn.com.txt”可能是辅助资料,可能包含了关于算法的解释或者是一些额外的说明。 RSA算法由...
在Java中实现RSA算法,我们需要了解几个关键概念:公钥、私钥、模数、指数以及Java的Cipher类。 1. **RSA算法原理**: RSA的名字来源于它的发明者Ron Rivest、Adi Shamir和Leonard Adleman。该算法基于大整数因子...
1. **RSA原理**:RSA算法基于数论中的大数因子分解难题,由两个大素数P和Q相乘得到N,然后计算N的欧拉函数φ(N) = (P-1) * (Q-1),选取一个与φ(N)互质的整数E作为公钥的加密指数,再计算E关于φ(N)的模逆数D作为...
下面将详细介绍RSA算法的核心原理、工作流程及其在Java中的实现。 RSA算法基于数论中的两个基本概念:大整数分解和欧拉函数。其主要思想是,选取两个大素数p和q,它们的乘积n=p*q非常大,且难以分解。然后计算n的...
### RSA算法实现报告 #### 实验环境 - **硬件配置**:处理器:Intel(R) Core(TM) i5-2430M CPU @ 2.40GHz (4CPUs), ~2.4GHz;内存:2048MB RAM - **软件工具**: - 操作系统:Windows 7 旗舰版 - 开发工具:...
在Java中实现RSA算法,我们需要使用Java Cryptography Extension (JCE)框架。JCE提供了一系列接口和类,如Cipher、KeyPairGenerator、KeyPair等,用于处理各种加密和解密操作。以下是对RSA算法在Java中实现的详细...
在Java中实现RSA算法,主要涉及到`java.security`和`javax.crypto`这两个包中的类。 1. **RSA算法原理** RSA算法的核心是欧拉定理和费马小定理。两个大素数p和q相乘得到n=p*q,计算φ(n)=(p-1)*(q-1),然后选取一...
Java实现RSA算法时,通常会用到`java.security`和`javax.crypto`这两个包中的类。模的重复平方算法(也称为快速幂运算)用于高效地计算大整数的幂,而中国剩余定理(Chinese Remainder Theorem, CRT)则在某些情况下...
这是用JAVA编写的RSA算法,功能比较完整,不过注意支持的数字不能太大。
RSA算法基于大数分解难题的原理,使用公钥加密、私钥解密的方式实现信息的加密和解密。 知识点2:Java中RSA加密解密算法的实现 在Java中,可以使用Java Cryptography Architecture(JCA)来实现RSA加密解密算法。...
为了实现C#与Java之间的互通加解密,需要确保两边使用的RSA算法实现一致,包括密钥生成、填充算法及加密解密的具体实现。 - **密钥一致性**:确保C#与Java生成的公私钥对相同。 - **填充算法一致性**:两边都应采用...
在Java中实现RSA算法,主要涉及到`java.security`和`javax.crypto`这两个包中的类和接口。下面将详细介绍如何在Java中实现RSA算法,并提供相关的源码解析。 一、RSA算法原理 RSA算法基于两个大素数的乘积难以分解的...
Java中的RSA算法是一种广泛使用的非对称加密技术,它的全称是Rivest-Shamir-Adleman,由三位密码学专家在1977年提出。这种算法基于大整数因子分解的数学难题,提供了相对较高的安全性。在Java中,我们可以利用`java....
java利用大整数类实现的一个RSA加解密签名过程。
用JAVA语言实现RSA算法.kdh