- 浏览: 390228 次
- 性别:
- 来自: 长春
文章分类
最新评论
-
milkyTea_:
...
学习:二维码、QR码、J4L-QRCode、java -
xunke515:
请问如何更换其他用户,注销了从新登录的时候选择么?
Hadoop启动时出现Unrecognized option: -jvm 和 Could not create the Java virtual machine -
_copythat:
学习:二维码、QR码、J4L-QRCode、java -
小fi(FD):
楼主,你好,关于你发表的《基于动态表单的Java不确定字段数报 ...
基于动态表单的Java不确定字段数报表项目实现 -
rmn190:
受用了。多谢分享!
SD2见闻--参加PPT制作秘笈沙龙
用RSA算法进行加密和解密
一、 生成公钥和私钥
公钥可以对外公开,供其他人加密使用,而把私钥秘密保存用于解密。下面程序产生公钥和私钥,并将他们分别保存在文件中。
import java.io.*;
import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.*;
public class Skey_RSA{
public static void main(String args[]) throws Exception{
//创建密钥对生成器,指定加密和解密算法为RSA
KeyPairGenerator kpg=KeyPairGenerator.getInstance("RSA");
//指定密钥的长度,初始化密钥对生成器
kpg.initialize(1024);
//生成密钥对
KeyPair kp=kpg.genKeyPair();
//获取公钥
PublicKey pbkey=kp.getPublic();
//获取私钥
PrivateKey prkey=kp.getPrivate();
//保存公钥到文件
FileOutputStream f1=new FileOutputStream("Skey_RSA_pub.dat");
ObjectOutputStream b1=new ObjectOutputStream(f1);
b1.writeObject(pbkey);
//保存私钥到文件
FileOutputStream f2=new FileOutputStream("Skey_RSA_priv.dat");
ObjectOutputStream b2=new ObjectOutputStream(f2);
b2.writeObject(prkey);
}}
二、使用RSA算法,用公钥对明文加密
import java.security.*;
import java.security.spec.*;
import javax.crypto.*;
import javax.crypto.spec.*;
import javax.crypto.interfaces.*;
import java.security.interfaces.*;
import java.math.*;
import java.io.*;
public class Enc_RSA{
public static void main(String args[]) throws Exception{
//需要加密的明文字符串
String s="Hello World!";
//从文件中读取公钥
FileInputStream f=new FileInputStream("Skey_RSA_pub.dat");
ObjectInputStream b=new ObjectInputStream(f);
RSAPublicKey pbk=(RSAPublicKey)b.readObject( );
//RSA算法是使用整数进行加密的,在RSA公钥中包含有两个整数信息:e和n。对于明文数字m,计算密文的公式是m的e次方再与n求模。
BigInteger e=pbk.getPublicExponent();
BigInteger n=pbk.getModulus();
System.out.println("e= "+e);
System.out.println("n= "+n);
//获取明文的大整数
byte ptext[]=s.getBytes("UTF8");
BigInteger m=new BigInteger(ptext);
//加密明文
BigInteger c=m.modPow(e,n);
//打印密文c
System.out.println("c= "+c);
//将密文以字符串形式保存在文件中
String cs=c.toString( );
BufferedWriter out=
new BufferedWriter(new OutputStreamWriter(
new FileOutputStream("Enc_RSA.dat")));
out.write(cs,0,cs.length( ));
out.close( );
}
}
运行结果:
C:\java>java Enc_RSA
e= 65537
n= 13405802078375219658602862966795918240406064464423931951911888365236988242463
33406825151412877079295194644119374029616583316891373732288186538465516523463338
00587304780823025797697373087120665466308717068337942675197170744407800699203571
700904520312857964222781057020371566890161797790968413791779126227980669
c= 47607898340767965145701968255755546566892745661227674225772563975813289594435
28414345875647978484338295878599291349642839959842123774575104652337796795510160
29860635595339439914429389478586533022360831125097334674213734766040265793820856
94641532612227941560162099100409874338485658721364756817554501714726488
三、使用RSA算法,用私钥对密文解密
import java.security.*; import java.security.spec.*; import javax.crypto.*; import javax.crypto.spec.*; import javax.crypto.interfaces.*; import java.security.interfaces.*; import java.math.*; import java.io.*; public class Dec_RSA{ public static void main(String args[]) throws Exception{ //读取密文 BufferedReader in= new BufferedReader(new InputStreamReader(new FileInputStream("Enc_RSA.dat"))); String ctext=in.readLine(); BigInteger c=new BigInteger(ctext); //获取私钥 FileInputStream f=new FileInputStream("Skey_RSA_priv.dat"); ObjectInputStream b=new ObjectInputStream(f); RSAPrivateKey prk=(RSAPrivateKey)b.readObject( ); //获取私钥的参数d,n BigInteger d=prk.getPrivateExponent(); BigInteger n=prk.getModulus(); System.out.println("d= "+d); System.out.println("n= "+n); //解密明文 BigInteger m=c.modPow(d,n); System.out.println("m= "+m); //计算明文对应的字符串并输出。 byte[] mt=m.toByteArray(); System.out.println("PlainText is "); for(int i=0;i<mt.length;i++){ System.out.print((char) mt[i]); } } } 运行结果: C:\java>java Dec_RSA d= 64430162177802259610093989308045506009782293742530938038256352858421144645179 07387915012771839150959006500216983259054143661663562540185437171153217183581928 20085372721431999404588971809332312650448511194624894811079224536652906125419899 15290971295079971714184656932298777888024850821287330626750486312295257 n= 13405802078375219658602862966795918240406064464423931951911888365236988242463 33406825151412877079295194644119374029616583316891373732288186538465516523463338 00587304780823025797697373087120665466308717068337942675197170744407800699203571 700904520312857964222781057020371566890161797790968413791779126227980669 m= 22405534230753928650781647905 PlainText is Hello World!
评论
例如
//获取明文的大整数
byte ptext[]=s.getBytes("UTF8");
BigInteger m=new BigInteger(ptext);
//加密明文
改为
byte ptext[] =new byte[]{72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33};
注:{72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33}就是hello world
这样也是没问题,但是如果将byte组数的第一个元素改为负数,解密出来就有问题。不知你是没有试过。
发表评论
-
如何让cxf客户端简单支持ssl
2012-06-26 22:52 976首先生成自我签名的证书,关于如何使用keytool生成证 ... -
webservice cxf 开发实战
2012-05-30 15:51 750webservice cxf 开发实战,请看附件(含源码)。 -
JMeter 使用入门
2011-10-22 14:31 836JMeter 使用入门 <!-- google ... -
Java知识拾遗:三大框架的技术起源
2011-08-02 07:06 781Struts、Hibernate和Spring是我们Ja ... -
分享高效java开发者必备的资源列表
2011-07-14 00:01 693一. Java相关工具资源 1. Eclipse 开 ... -
Office等类型文件的在线编辑
2011-05-10 23:04 128715.4 Office等类型文件的在线编辑自从WebDA ... -
学习:二维码、QR码、J4L-QRCode、java
2011-04-15 18:52 33700开源码 Java 解码器(编码解码)下载:http://s ... -
使用 jsoup 对 HTML 文档进行解析和操作
2011-04-04 21:59 504jsoup 简介 Java 程序在解析 HTML 文档时 ... -
Java通过jsoup实现网页天气数据解析
2011-04-03 10:04 1425import java.io.IOException; ... -
免费的office开发控件weboffice
2011-02-11 14:32 1540免费的office开发控件weboffice,有Java版本的 ... -
Java程序把Word文档直接转换成HTML文件
2011-02-09 09:57 1124Jacob是Java和Windows下的Com桥,通过它我们可 ... -
Tomcat总死可以试一试调一下catalina.bat的这一行
2011-01-12 08:12 846set DEBUG_OPTS=-Xms512m -Xmx102 ... -
Tomcat内存溢出的原因以及解决办法
2010-12-29 13:57 875Tomcat内存溢出的原因 在生产环境中tomcat内存设置 ... -
PHP+MYSQL的OA为何没有Java的值钱
2010-12-25 11:33 840现在市场上的oa基本上可归结为两大阵营,即php阵营和java ... -
MyEclipse 6.0.1配置Tomcat 6服务器【图解】
2010-09-03 14:48 16921 从菜单[Windows]选择[Preferences. ... -
一个Java Web搜索程序
2010-07-20 10:01 1026这是一个web搜索的基本程序,从命令行输入搜索条件(起始的UR ... -
java 查询可用域名
2010-07-20 09:48 1430这段时间在注册域名,咱起步晚,好用的域名都给别人注册了。 想 ... -
用javascript与java进行RSA加密与解密
2010-07-19 08:47 977这几天一直做安全登录,网上查了好多资料,不尽如意。 ... -
公钥加密私钥解密&私钥加密公钥解密
2010-07-16 16:20 1546公钥加密体制1、公钥加密体制用于保密性时,就是公钥加密,私钥解 ... -
Java生成RSA非对称型加密的公钥和私钥(利用java API)
2010-07-16 14:10 1512非对称型加密非常适合多个客户端和服务器之间的秘密通讯,客户端使 ...
相关推荐
密码学 RSA算法 加密和解密 C++ 很好用的 ,理工的学生赶紧来下载吧
MD5和RSA是网络传输中最常用的两个算法,本例使用MD5和RSA加密算法实现加密解密,可直接在项目中使用,非常方便可靠!
rsa加密算法加密与解密过程解析.pdfrsa加密算法加密与解密过程解析.pdfrsa加密算法加密与解密过程解析.pdfrsa加密算法加密与解密过程解析.pdfrsa加密算法加密与解密过程解析.pdfrsa加密算法加密与解密过程解析.pdf
Object-C_在iOS上使用Object-C进行RSA算法的加密+解密实现
可以直接运行成功的RSA加密解密示例 JAVA端采用公钥加密,服务端C#采用私钥解密。
RSA加密解密算法源码,功能齐全,没有密码,使用方便,学习用.
python实现的RSA加密解密算法,带图形界面,key.py随机生成公钥私钥,消息可利用加密器解密器进行加密
RSA加密算法实现以及C#与java互通加解密,解决RSA算法在java与C#相互通用
RSA加密解密算法 C++ 密码学 RSA加密解密算法 C++ 密码学 RSA加密解密算法 C++ 密码学
RSA算法的加密与解密算法(界面为英文)。。。。。
使用 RSA 算法的图像...在这里,我们在 IMAGE 上实现 RSA(非对称密钥加密)算法,以使用两个密钥(私钥和公钥)进行加密和解密。要了解有关图像上的 RSA 加密的更多信息,请阅读我在存储库中上传的 pdf(RSA 图像)
RSA算法加密解密,有VB界面,实现对加密解密算法的调用,形成对txt文件的加密解密。
RSA 加密解密算法C语言 (含linux)内含代码加实例
设计一个使用RSA算法进行加密解密的系统网络安全基础课程设计word格式.doc
利用System.Numerics.BigInteger实现,私钥加密,公钥解密。兼容PKCS1填充方式。有效文件只有MyRSA.cs一个,其它文件是因为带了一个演示窗口。
RSA算法C语言加密、解密完整C语言程序
RSA加密解密的算法例程,以及内存使用情况的分析
RSA加密解密算法实例
RSA算法加密、解密、密匙的产生的实现源程序
读硬盘序列号和加密RSA算法.rar 读硬盘序列号和加密RSA算法.rar