- 浏览: 402835 次
- 性别:
- 来自: 长春
文章分类
最新评论
-
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 1040首先生成自我签名的证书,关于如何使用keytool生成证 ... -
webservice cxf 开发实战
2012-05-30 15:51 790webservice cxf 开发实战,请看附件(含源码)。 -
JMeter 使用入门
2011-10-22 14:31 862JMeter 使用入门 <!-- google ... -
Java知识拾遗:三大框架的技术起源
2011-08-02 07:06 831Struts、Hibernate和Spring是我们Ja ... -
分享高效java开发者必备的资源列表
2011-07-14 00:01 724一. Java相关工具资源 1. Eclipse 开 ... -
Office等类型文件的在线编辑
2011-05-10 23:04 133015.4 Office等类型文件的在线编辑自从WebDA ... -
学习:二维码、QR码、J4L-QRCode、java
2011-04-15 18:52 33889开源码 Java 解码器(编码解码)下载:http://s ... -
使用 jsoup 对 HTML 文档进行解析和操作
2011-04-04 21:59 575jsoup 简介 Java 程序在解析 HTML 文档时 ... -
Java通过jsoup实现网页天气数据解析
2011-04-03 10:04 1466import java.io.IOException; ... -
免费的office开发控件weboffice
2011-02-11 14:32 1617免费的office开发控件weboffice,有Java版本的 ... -
Java程序把Word文档直接转换成HTML文件
2011-02-09 09:57 1167Jacob是Java和Windows下的Com桥,通过它我们可 ... -
Tomcat总死可以试一试调一下catalina.bat的这一行
2011-01-12 08:12 888set DEBUG_OPTS=-Xms512m -Xmx102 ... -
Tomcat内存溢出的原因以及解决办法
2010-12-29 13:57 914Tomcat内存溢出的原因 在生产环境中tomcat内存设置 ... -
PHP+MYSQL的OA为何没有Java的值钱
2010-12-25 11:33 871现在市场上的oa基本上可归结为两大阵营,即php阵营和java ... -
MyEclipse 6.0.1配置Tomcat 6服务器【图解】
2010-09-03 14:48 17291 从菜单[Windows]选择[Preferences. ... -
一个Java Web搜索程序
2010-07-20 10:01 1063这是一个web搜索的基本程序,从命令行输入搜索条件(起始的UR ... -
java 查询可用域名
2010-07-20 09:48 1473这段时间在注册域名,咱起步晚,好用的域名都给别人注册了。 想 ... -
用javascript与java进行RSA加密与解密
2010-07-19 08:47 1013这几天一直做安全登录,网上查了好多资料,不尽如意。 ... -
公钥加密私钥解密&私钥加密公钥解密
2010-07-16 16:20 1586公钥加密体制1、公钥加密体制用于保密性时,就是公钥加密,私钥解 ... -
Java生成RSA非对称型加密的公钥和私钥(利用java API)
2010-07-16 14:10 1566非对称型加密非常适合多个客户端和服务器之间的秘密通讯,客户端使 ...
相关推荐
本教程将详细讲解如何在iOS项目中使用Object-C实现RSA算法的加密和解密功能。 首先,了解RSA的基本原理至关重要。RSA是一种公钥密码体制,基于两个大素数的乘积难以因式分解这一事实。它包含一对密钥:公钥和私钥。...
同时,学生也可以学习到如何设计和实现一个使用RSA算法进行加密解密的系统,包括操作界面设计和算法实现代码的编写。 参考文献: 1. RSA官方网站:https://www.rsa.com/ 2. 《数据加密解密》作者:John Smith 出版...
RSA算法是一种非对称加密算法,它在信息安全领域有着广泛的应用,特别是在数据加密、数字签名以及安全通信等方面。它的核心特点在于使用一对密钥,一个用于加密,另一个用于解密,且这两者之间存在数学关系,但计算...
私钥加密和公钥解密是RSA算法的核心特性,允许发送者使用接收者的公钥来加密数据,而只有持有对应私钥的接收者才能解密。在这个特定的案例中,`MyRSA.cs` 文件提供了一个实现,它使用了 `System.Numerics.BigInteger...
RSA算法是一种非对称加密算法,它在信息安全领域有着广泛的应用,特别是在数据传输中的加密解密环节。Python作为一门易学且功能强大的编程语言,提供了许多库来支持RSA算法的实现,例如`cryptography`库。这个名为...
RSA算法是一种非对称加密技术,它在信息安全领域扮演着重要的角色。非对称加密与对称加密的主要区别在于,它使用两个不同的密钥:一个公钥用于加密,另一个私钥用于解密。RSA的名字来源于它的发明者Ron Rivest、Adi ...
本资源提供了RSA加密解密的源码,适用于学习和理解RSA算法的工作原理及其实现。 首先,RSA算法的核心原理基于大数的因式分解困难性。它由三位科学家Rivest、Shamir和Adleman于1977年提出,因此得名RSA。该算法包括...
RSA算法基于大数分解难题的原理,使用公钥加密、私钥解密的方式实现信息的加密和解密。 知识点2:Java中RSA加密解密算法的实现 在Java中,可以使用Java Cryptography Architecture(JCA)来实现RSA加密解密算法。...
在给定的"RSA.zip"压缩包中,可能包含了C++代码示例,用于演示如何使用RSA算法进行加密和解密操作,以及如何生成和管理公钥私钥对。文件名"RSA"可能是源代码文件或执行程序。通过学习和理解这些代码,开发者可以更好...
本教程主要讲解如何在C# .NET环境中使用RSA进行公钥加密和私钥解密,以及私钥加密和公钥解密的操作。 首先,让我们了解RSA的基本原理。RSA算法基于两个大素数的乘积,这个乘积作为公钥,而这两个大素数作为私钥。...
RSA算法基于数论中的两个基本原理:欧拉定理和大数因子分解的困难性。 1. **欧拉定理**:欧拉定理是数论中的一个重要定理,它指出如果a和n互质,那么a的欧拉函数φ(n)次幂模n的余数为1,即a^φ(n) ≡ 1 (mod n)。...
这个“rsa.rar”压缩包包含了一个用于演示RSA算法在图片加密解密上的应用。 在RSA算法中,有两把密钥:公钥和私钥。公钥可以公开给任何人,而私钥必须保密。加密过程是使用接收者的公钥对数据进行加密,解密则需要...
在Unity引擎中,RSA(Rivest-Shamir-Adleman)是一种广泛使用的非对称加密算法,常用于安全传输数据、数字签名等场景。本文将深入探讨RSA加密和解密的基础知识以及如何在Unity中实现这一功能。 首先,RSA加密的核心...
Object-C-在iOS上使用Object-C进行RSA算法的加密+解密实现源代码 在iOS平台上,Object-C是开发原生应用的主要编程语言之一,尤其在苹果的移动设备上。RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,广泛应用于...
综上所述,"RSA算法加密解密"项目利用VB和RSA—com组件,构建了一个用户界面,实现了对txt文件的加密和解密功能。用户可以通过这个界面轻松操作,而底层的加密解密过程则是基于强大的RSA算法,确保了数据的安全传输...
RSA加密解密算法是密码学中一种常用的加密算法,以 Ron Rivest、Adi Shamir 和 Leonard Adleman 三人命名。该算法基于大数分解问题的困难性,使用公钥加密和私钥解密的方式来保护数据的安全。 该算法的基本原理是:...
在iOS平台上使用Objective-C进行RSA加密和解密通常涉及几个步骤,包括生成RSA密钥对、使用公钥加密数据、以及使用私钥解密数据。以下是一个简化的步骤说明和示例代码,展示了如何使用Objective-C和CommonCrypto库...
RSA加密解密算法是公开密钥密码体制的一种典型代表,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因此得名RSA。这种算法基于大整数因子分解的困难性,即找到两个大素数的乘积很容易,但将该乘积分解回...
Object-C-在iOS上使用Object-C进行RSA算法的加密+解密实现代码 在iOS平台上,Object-C是开发原生应用的主要编程语言之一,尤其在苹果的移动设备上。RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,广泛应用于...
为了实现C#与Java之间的互通加解密,需要确保两边使用的RSA算法实现一致,包括密钥生成、填充算法及加密解密的具体实现。 - **密钥一致性**:确保C#与Java生成的公私钥对相同。 - **填充算法一致性**:两边都应采用...