RSA加密算法的java实现
package rsa; import java.security.*;
import java.security.interfaces.*;
import javax.crypto.*; public class Test {
protected static RSAPrivateKey privateKey;
protected static RSAPublicKey publicKey;
protected static byte[] resultBytes;
public Test(){
try{
String message = "广东省广州市越秀区";
// Test p = new Test();
System.out.println("明文是" + message);
//生成公钥和私钥对,基于RSA算法生成对象
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
//初始化密钥对生成器,密钥大小为1024位
keyPairGen.initialize(1024);
//生成一个密钥对,保存在keyPair中
KeyPair keyPair = keyPairGen.generateKeyPair();
//得到私钥和公钥
privateKey =(RSAPrivateKey) keyPair.getPrivate();
publicKey = (RSAPublicKey)keyPair.getPublic();
// System.out.println(privateKey.toString());
//用公钥加密
byte[] srcBytes = message.getBytes();
resultBytes = Test.encrypt(publicKey, srcBytes);
String result = new String(resultBytes);
System.out.println("用公钥加密后密文是:" + result);
// return privateKey;
// //用私钥解密
// byte[] decBytes = Test.decrypt(privateKey,resultBytes);
// String dec = new String(decBytes);
// System.out.println("用私钥加密后的结果是:" + dec);
}catch(Exception e){
e.printStackTrace();
}
// return null;
}
protected static byte[] encrypt(RSAPublicKey publicKey,byte[] srcBytes){
if(publicKey != null){
try{
//Cipher负责完成加密或解密工作,基于RSA
Cipher cipher = Cipher.getInstance("RSA");
//根据公钥,对Cipher对象进行初始化
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
//加密,结果保存进resultBytes,并返回
byte[] resultBytes = cipher.doFinal(srcBytes);
return resultBytes;
}catch(Exception e){
e.printStackTrace();
}
}
return null;
}
protected static byte[] decrypt(RSAPrivateKey privateKey,byte[] encBytes){
if(privateKey != null){
try{
Cipher cipher = Cipher.getInstance("RSA");
//根据私钥对Cipher对象进行初始化
cipher.init(Cipher.DECRYPT_MODE, privateKey);
//解密并将结果保存进resultBytes
byte[] decBytes = cipher.doFinal(encBytes);
return decBytes;
}catch(Exception e){
e.printStackTrace();
}
}
return null;
}
}
package rsa; public class PrivateKeyTest {
public static void main(String[] args){
Test test = new Test(); // System.out.println(Test.privateKey);
// String msg = new String(Test.resultBytes); byte[] decBytes = Test.decrypt(Test.privateKey, Test.resultBytes);
String dec = new String(decBytes); System.out.println("用私钥加密后的结果是:" + dec);
}
}
在一个项目中,要对二维码进行加密,这是测试RSA加密算法的模块。由于刚接触加密算法,很多细节还不清楚。通过这个测试搞清楚了几点,一是每次加密产生的公钥和私钥都是不同。
对Java的一些基础知识也有了补充。在定义了静态变量后,用类名调用,并且在之后使用这一静态变量的时候不要再重新定义,不然会产生空指针问题。
RSA加密算法的java实现的更多相关文章
- Java使用RSA加密算法对内容进行加密
什么是RSA加密算法 RSA是一种典型的非对称性加密算法,具体介绍可参考阮一峰的日志 RSA算法原理 下面是使用RSA算法对传输内容进行加密的一个简要Java案例,主要用到了三个类,大体实现如下: 对 ...
- java RSA加密算法
[转]RSA加密算法 RSA公钥加密算法是1977年由Ron Rivest.Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的.RSA取名来自开发他们三者的名字.RSA是目前 ...
- java实现rsa加密算法【5min快速应用教程】
该篇文章的主要目的是让读者能够迅速应用到项目中,想要了解详细的rsa加密算法的,可以百度找到更多原理.深度分析的文章. RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一 ...
- .net(c#)版RSA加密算法,拿走不谢
今天有同学对接一个支付平台,涉及到RSA的签名和验签.由于对方是java的sdk,翻成c#语言时,搞了半天也没搞定.网上搜的东西都是各种copy还不解决问题. 碰巧,我之前对接过连连银通的网银支付和代 ...
- RSA加密算法的简单案例
RSA加密算法是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击. 那关于RSA加密算法有哪些应用呢?以下举一个数据库身份验证的案例. 在使用数据集进行身份认证时,密码存在数据 ...
- 轻松学习RSA加密算法原理
转自:http://blog.csdn.net/sunmenggmail/article/details/11994013 http://blog.csdn.net/q376420785/articl ...
- RSA加密算法原理及RES签名算法简介
第一部分:RSA算法原理与加密解密 一.RSA加密过程简述 A和B进行加密通信时,B首先要生成一对密钥.一个是公钥,给A,B自己持有私钥.A使用B的公钥加密要加密发送的内容,然后B在通过自己的私钥解密 ...
- 常用加密算法的Java实现总结
常用加密算法的Java实现(一) ——单向加密算法MD5和SHA 1.Java的安全体系架构 1.1 Java的安全体系架构介绍 Java中为安全框架提供类和接口.JDK 安全 A ...
- 常用加密算法的Java实现(一) ——单向加密算法MD5和SHA
1.Java的安全体系架构 1.1 Java的安全体系架构介绍 Java中为安全框架提供类和接口.JDK 安全 API 是 Java 编程语言的核心 API,位于 java.sec ...
随机推荐
- ul ol di三者区别
1.ul是无序列表,也就是说没有排列限制可以随意加li: <ul> <li>可以随意放置</li> <li>可以随意放置</li> < ...
- 【单页应用巨坑之History】细数History带给单页应用的噩梦
前言 在我们日常的网页浏览中,我们非常喜欢做一个操作:点击浏览器的前进后退在Ajax技术出现后,有些时候前进后退就会给开发者带来困扰,甚至一些开发者试图去干掉History随着Html5的发展,移动端 ...
- JS学习笔记9之event事件及其他事件
-->鼠标事件-->event事件对象-->默认事件-->键盘事件(keyCode)-->拖拽效果 一.鼠标事件 onclick ---------------鼠标点击事 ...
- HTML5学习笔记四 HTML文本格式化
HTML 格式化标签 HTML 使用标签<b> 与<i> 对输出的文本进行格式, 如:粗体 or 斜体 这些HTML标签被称为格式化标签 通常标签 <strong> ...
- 在其他系统Iframe中显示SharePoint 页面
前段时间在做一个项目,要求将SharePoint 的 OWA(Office Web Apps)中的文档显示页面嵌入到另外一个OA系统中,提供给用户可以通过浏览器查看SharePoint文档的能力. 嵌 ...
- JDBC快速入门
/** * JDBC快速入门: * 1.导入jar包 数据库驱动 * 2.注册驱动 * 3.获取数据库连接对象 Connection * 4.定义sql语句 * 5.获取发送执行sql语句的对象 St ...
- iOS8 tableview separatorInset cell分割线左对齐,ios7的方法失效了
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 -(void)viewDidLayoutSubviews { if ([self.m ...
- python编码问题
SCII编码是1个字节,而Unicode编码(汉字)通常是2个字节.一个字节8位(bit) 如果统一成Unicode编码,英文字母就会占用2个字节,造成空间浪费.从而出现了utf8可变编码,utf8编 ...
- 常用API——Math对象型、Number型
Math.abs(num) : 返回num的绝对值 Math.acos(num) : 返回num的反余弦值 Math.asin(num) : 返回num的反正弦值 Math.atan(num) : 返 ...
- Java暗箱操作之for-each
对于我们常用的ArrayList等容器类,经常需要一个一个遍历里面的元素,从而对各个元素执行对应的操作. 像我代码写多了,通常的做法是用传统的,类似于数组遍历的方法,即在for循环中设置一个int变量 ...