package rsa;
import java.security.Key;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import javax.crypto.Cipher;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public class RSAUtil {
public static String[] initKey() throws Exception {
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
//密钥位数
keyPairGen.initialize(1024);
//密钥对
KeyPair keyPair = keyPairGen.generateKeyPair();
// 公钥
PublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
// 私钥
PrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
String publicKeyString = getKeyString(publicKey);
System.out.println("public:\n" + publicKeyString);
String privateKeyString = getKeyString(privateKey);
System.out.println("private:\n" + privateKeyString);
return new String[]{publicKeyString, privateKeyString};
}
public static String encode(String data, String publicKey) throws Exception {
//加解密类
Cipher cipher = Cipher.getInstance("RSA");//Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, getPublicKey(publicKey));
//加密
byte[] enBytes = cipher.doFinal(data.getBytes("UTF-8"));
return new BASE64Encoder().encode(enBytes);
}
public static String decode(String data, String privateKey) throws Exception {
//加解密类
Cipher cipher = Cipher.getInstance("RSA");//Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, getPrivateKey(privateKey));
//加密
byte[] deBytes = new BASE64Decoder().decodeBuffer(data);
byte[] enBytes = cipher.doFinal(deBytes);
return new String(enBytes, "UTF-8");
}
/**
* 得到公钥
* @param key 密钥字符串(经过base64编码)
* @throws Exception
*/
private static PublicKey getPublicKey(String key) throws Exception {
byte[] keyBytes;
keyBytes = (new BASE64Decoder()).decodeBuffer(key);
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(keySpec);
return publicKey;
}
/**
* 得到私钥
* @param key 密钥字符串(经过base64编码)
* @throws Exception
*/
private static PrivateKey getPrivateKey(String key) throws Exception {
byte[] keyBytes;
keyBytes = (new BASE64Decoder()).decodeBuffer(key);
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = keyFactory.generatePrivate(keySpec);
return privateKey;
}
/**
* 得到密钥字符串(经过base64编码)
* @return
*/
private static String getKeyString(Key key) throws Exception {
byte[] keyBytes = key.getEncoded();
String s = (new BASE64Encoder()).encode(keyBytes);
return s;
}
public static void main(String[] args) throws Exception {
//明文
String plainText = "很好!hello world";
String[] keys = initKey();
System.out.println(encode(plainText, keys[0]));
System.out.println(decode(encode(plainText, keys[0]), keys[1]));
}
}
分享到:
相关推荐
在`demoCode`文件中,你应该能找到实现这些操作的具体C#和Java代码。这些代码演示了.NET与Java间如何正确地进行RSA签名验证和加密解密。确保在实际应用中,安全地处理和存储密钥,遵循最佳实践,以防止密钥泄露导致...
public class RSA_Code { // 类变量声明 } ``` #### 质数生成 ```java public static void create_prime() { do { prim_1 = BigInteger.probablePrime(10, new Random()).intValue(); prim_2 = BigInteger....
Java DES(Data Encryption Standard)是一种广泛使用的对称加密算法,主要用在数据的加密与解密上。在Java中,可以使用javax.crypto包中的类来实现DES算法。本压缩包包含的是Java环境下DES算法的实现源代码,对于...
在实际应用中,RSA常与其他算法如HMAC(Hash-based Message Authentication Code)结合使用,以提供消息完整性检查。同时,由于RSA加密速度相对较慢,通常用于加密小量数据(如密钥交换),而非大量数据的直接加密。...
本项目“java_code.rar”聚焦于Java实现的字符串加密解密技术,旨在提供一个实用的解决方案来保护敏感信息。 首先,我们需要理解加密和解密的基本概念。加密是将明文(可读信息)转化为密文(不可读信息)的过程,...
Its problems in decryption are optimized using rsa variants like crt rsa, multiprime rsa, rebalanced rsa and rprime rsa. U should give the no. of bits to be 1024 and check it on netbeans 6.5 or later...
描述中的"Code for RSA encryp and decryp"确认了这个项目的核心功能是实现RSA加密和解密的代码。在实际应用中,RSA加密通常用于保护敏感数据,例如密码、个人信息或者金融交易信息,因为它提供了一种方式,使得只有...
本文将深入探讨Java中常见的几种加密解密算法:SHA算法、HMAC算法、DES算法、PBE算法、AES算法、RSA算法、数字签名以及D-H算法。 1. SHA(Secure Hash Algorithm)算法: SHA是一种散列函数,它能将任意长度的输入...
书中还提供了大量的Java代码示例,用于演示各种加密算法和技术的具体实现方式。这些代码不仅有助于加深理解,也是学习Java编程的宝贵资源。 #### 四、附录 - **附录A:使用打印对数表** 介绍了如何利用对数表简化...
提到的文件列表中包含的"codefans.net"可能是指一个包含相关代码示例的资源,通常这些示例会详细展示如何在Java程序中实现上述加密算法。通过阅读和学习这些代码,可以更直观地了解如何在实际项目中应用加密技术。 ...
本资源"基于java的用Java加密类实现DES、RSA及SHA的加密算法.zip"正是聚焦于利用Java语言实现三种主流的加密算法:DES(Data Encryption Standard)、RSA(Rivest-Shamir-Adleman)和SHA(Secure Hash Algorithm)。...
通过阅读《Java Cryptography and code》这本书,开发者可以学习如何在实际项目中应用这些概念,书中应该包含了丰富的示例代码,帮助读者更好地理解Java加密API的使用方法和最佳实践。对于那些希望增强其应用程序...
这个RAR压缩包包含了RSA算法在Java环境下的实现,且具有图形用户界面(GUI)。为了运行这个程序,你需要bcprov-jdk14-123.jar库,这是Bouncy Castle提供的一个开源Java加密库,它提供了许多扩展的加密功能,包括对...
Java_ecc_code.zip是一个压缩包,包含了Java语言实现的椭圆曲线密码算法(Elliptic Curve Cryptography,简称ECC)的相关代码。ECC是一种基于数学难题——椭圆曲线离散对数问题的公钥加密算法,它在安全性相当的情况...
java.security.interfaces 提供的接口用于生成 RSA Laboratory Technical Note PKCS#1 中定义的 RSA(Rivest、Shamir 和 Adleman AsymmetricCipher 算法)密钥,以及 NIST 的 FIPS-186 中定义的 DSA(数字签名算法)...
《密码学的法则与Java代码》这本书由Neal R. Wagner撰写,涵盖了密码学的基础知识以及与Java编程语言相结合的实例。本书不仅讲解了密码学的基本原则,而且提供了具体的Java代码,让读者可以在实践中学习和掌握密码学...
这个压缩包“java-security-mechanisms-code.rar”包含了关于Java安全机制的实例程序,可以帮助我们深入理解Java如何实现其安全特性。 1. **Java安全模型** Java的安全模型基于沙箱模型,它限制了未经许可的代码...
本文将深入探讨标题"Java和Android Encrypt Eclipse Project and Source Code"所涉及的核心知识点,包括对称加密算法(DES,3DES,AES128和AES256)以及非对称加密算法RSA,并介绍如何在Java和Android平台上实现它们...
实现RSA加解密和签名功能。要求如下:1、安全参数:1024 bits-2048bits 2、有简单的交互界面、或命令行操作 3、语言: Python、 C/C++、Java 4、平台:不限5、加解密可以针对简单的字符文本;签名(验证签名)针对...
本项目提供了在Eclipse(Java)和XCode(Objective-C)环境中进行加密和解密的示例代码,涵盖了DES,3DES,AES128,AES256以及RSA等主流的加密算法。这些算法在信息安全、数据保护以及网络通信中扮演着至关重要的...