import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;
import javax.crypto.Cipher;
public class RSACrypto {
/**
* @param args
*/
private final static String RSA = "RSA";
public static PublicKey uk;
public static PrivateKey rk;
public void generateKey() throws Exception {
KeyPairGenerator gen = KeyPairGenerator.getInstance(RSA);
gen.initialize(512, new SecureRandom());
KeyPair keyPair = gen.generateKeyPair();
uk = keyPair.getPublic();
rk = keyPair.getPrivate();
}
private static byte[] encrypt(String text, PublicKey pubRSA)
throws Exception {
Cipher cipher = Cipher.getInstance(RSA);
cipher.init(Cipher.ENCRYPT_MODE, pubRSA);
return cipher.doFinal(text.getBytes());
}
public final String encrypt(String text) {
try {
return byte2hex(encrypt(text, uk));
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public final String decrypt(String data) {
try {
return new String(decrypt(hex2byte(data.getBytes())));
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private byte[] decrypt(byte[] src) throws Exception {
Cipher cipher = Cipher.getInstance(RSA);
cipher.init(Cipher.DECRYPT_MODE, rk);
return cipher.doFinal(src);
}
public String byte2hex(byte[] b) {
String hs = "";
String stmp = "";
for (int n = 0; n < b.length; n++) {
stmp = Integer.toHexString(b[n] & 0xFF);
if (stmp.length() == 1)
hs += ("0" + stmp);
else
hs += stmp;
}
return hs.toUpperCase();
}
public byte[] hex2byte(byte[] b) {
if ((b.length % 2) != 0)
throw new IllegalArgumentException("长度不是偶数");
byte[] b2 = new byte[b.length / 2];
for (int n = 0; n < b.length; n += 2) {
String item = new String(b, n, 2);
b2[n / 2] = (byte) Integer.parseInt(item, 16);
}
return b2;
}
// just for test
public static void main(String args[]) {
try {
RSACrypto rsa = new RSACrypto();
rsa.generateKey();
String cipherTest = rsa.encrypt("cissco");
System.out.println(cipherTest);
String plainText = rsa.decrypt(cipherTest);
System.out.println(plainText);
// System.out.println("\n");
// rsa.dddd(rsa);
} catch (Exception e) {
e.printStackTrace();
}
}
分享到:
相关推荐
RSA加密算法在VBRSA加密算法在VBRSA加密算法在VB
RSA加密算法的实现,使用c++语言编程,使用dev c++平台编码,文件为cpp格式。经过反复测试代码正确,可搭配RSA讲解教程一起使用,讲解教程点击我的个人主页即可查看,希望能够对你有帮助,谢谢。
RSA加密算法.ppt
RSA加密算法实验报告.pdf
QT上RSA加密算法实现,附带图形界面,更加直观
RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。1987年首次公布,当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏...
RSA加密算法流程图源代码;RSA加密算法流程图源代码
RSA加密算法的C语言实现
RSA加密算法源码,与大家分享
本例是基于VS2012平台,对于RSA加密算法的实现
RSA加密算法实现以及C#与java互通加解密,解决RSA算法在java与C#相互通用
用实例讲解RSA加密算法(精)
基于python+django的基于RSA加密算法软件的研究设计的实现.zip基于python+django的基于RSA加密算法软件的研究设计的实现.zip 运行步骤 需要先安装Python的相关依赖:pymysql,Django ,requests ,pycryptodomex,...
本rsa算法是使用Java与javascript加密解密范例代码,该资料从互联网收集,加上了自己的使用体会,如果对你有帮助那是万幸! js加密部分
RSA加密算法介绍,密匙的求解过程讲解,密匙的求解实例分析。
RSA加密算法实现附源代码, RSA 可用于数字签名,方案是用 ( a ) 式签名, ( b )式验证。具体操作时考虑到安全性和 m信息量较大等因素,一般是先作HASH 运算。RSA 的安全性。RSA的安全性依赖于大数分解,但是否等同...
这个算法非原创,真心不错,所以上传分享出来.实测过,满足需求
此代码不是简单利用RSA去实现加密解密的烂大街代码,而且通过本人推敲后结合实际应用而且构建出来的一段如何利用RSA加密算法保证通信过程中数据包不被第三方截获的技术,其中包含了 数字签名好双向加密、生成哈希码...
用java实现的rsa加密算法,里面有详细的加密过程的实现