java中的rsa\des算法的方法

作者&投稿:柴昨 (若有异议请与网页底部的电邮联系)
用C和Java语言,实现一个的DES算法或RSA算法逻辑~

这些不要自己写,因为都有现成的组件

DES算法:
优点:密钥较短,加密处理简单,加解密速度快,适用于加密大量数据的场合。
缺点:密钥单一,不能由其中一个密钥推导出另一个密钥。
RSA算法:
优点:应用广泛,加密密钥和解密密钥不一样,一般加密密钥称为私钥。解密密钥称为公钥,私钥加密后只能用公钥解密,,当然也可以用公钥加密,用私钥解密。
缺点:密钥尺寸大,加解密速度慢,一般用来加密少量数据,比如DES的密钥。



扩展资料:
安全性
RSA的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理论上的证明,因为没有证明破解RSA就一定需要作大数分解。假设存在一种无须分解大数的算法,那它肯定可以修改成为大数分解算法。RSA 的一些变种算法已被证明等价于大数分解。
不管怎样,分解n是最显然的攻击方法。人们已能分解多个十进制位的大素数。因此,模数n必须选大一些,因具体适用情况而定。
参考资料:百度百科——RSA
参考资料:百度百科——DES

rsa加密解密算法
1978年就出现了这种算法,它是第一个既能用于数据加密
也能用于数字签名的算法。它易于理解和操作,也很流行。算
法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和
Leonard Adleman。但RSA的安全性一直未能得到理论上的证明。

RSA的安全性依赖于大数分解。公钥和私钥都是两个大素数
( 大于 100个十进制位)的函数。据猜测,从一个密钥和密文
推断出明文的难度等同于分解两个大素数的积。

密钥对的产生:选择两个大素数,p 和q 。计算:
n = p * q
然后随机选择加密密钥e,要求 e 和 ( p - 1 ) * ( q - 1 )
互质。最后,利用Euclid 算法计算解密密钥d, 满足

e * d = 1 ( mod ( p - 1 ) * ( q - 1 ) )

其中n和d也要互质。数e和
n是公钥,d是私钥。两个素数p和q不再需要,应该丢弃,不要让任
何人知道。 加密信息 m(二进制表示)时,首先把m分成等长数据
块 m1 ,m2,..., mi ,块长s,其中 2^s <= n, s 尽可能的大。对
应的密文是:

ci = mi^e ( mod n ) ( a )

解密时作如下计算:

mi = ci^d ( mod n ) ( b )

RSA 可用于数字签名,方案是用 ( a ) 式签名, ( b )
式验证。具体操作时考虑到安全性和 m信息量较大等因素,一般是先
作 HASH 运算。

RSA 的安全性。
RSA的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理
论上的证明,因为没有证明破解RSA就一定需要作大数分解。假设存在
一种无须分解大数的算法,那它肯定可以修改成为大数分解算法。目前,
RSA的一些变种算法已被证明等价于大数分解。不管怎样,分解n是最显
然的攻击方法。现在,人们已能分解140多个十进制位的大素数。因此,
模数n必须选大一些,因具体适用情况而定。

RSA的速度:
由于进行的都是大数计算,使得RSA最快的情况也比DES慢上100倍,无论
是软件还是硬件实现。速度一直是RSA的缺陷。一般来说只用于少量数据
加密。

RSA的选择密文攻击:
RSA在选择密文攻击面前很脆弱。一般攻击者是将某一信息作一下伪装
(Blind),让拥有私钥的实体签署。然后,经过计算就可得到它所想要的信
息。实际上,攻击利用的都是同一个弱点,即存在这样一个事实:乘幂保
留了输入的乘法结构:

( XM )^d = X^d *M^d mod n

前面已经提到,这个固有的问题来自于公钥密码系统的最有用的特征
--每个人都能使用公钥。但从算法上无法解决这一问题,主要措施有
两条:一条是采用好的公钥协议,保证工作过程中实体不对其他实体
任意产生的信息解密,不对自己一无所知的信息签名;另一条是决不
对陌生人送来的随机文档签名,签名时首先使用One-Way HashFunction
对文档作HASH处理,或同时使用不同的签名算法。在中提到了几种不
同类型的攻击方法。

RSA的公共模数攻击。
若系统中共有一个模数,只是不同的人拥有不同的e和d,系统将是危险
的。最普遍的情况是同一信息用不同的公钥加密,这些公钥共模而且互
质,那末该信息无需私钥就可得到恢复。设P为信息明文,两个加密密钥
为e1和e2,公共模数是n,则:

C1 = P^e1 mod n

C2 = P^e2 mod n

密码分析者知道n、e1、e2、C1和C2,就能得到P。

因为e1和e2互质,故用Euclidean算法能找到r和s,满足:

r * e1 + s * e2 = 1

假设r为负数,需再用Euclidean算法计算C1^(-1),则

( C1^(-1) )^(-r) * C2^s = P mod n

另外,还有其它几种利用公共模数攻击的方法。总之,如果知道给定模数
的一对e和d,一是有利于攻击者分解模数,一是有利于攻击者计算出其它
成对的e’和d’,而无需分解模数。解决办法只有一个,那就是不要共享
模数n。

RSA的小指数攻击。 有一种提高
RSA速度的建议是使公钥e取较小的值,这样会使加密变得易于实现,速度
有所提高。但这样作是不安全的,对付办法就是e和d都取较大的值。

RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。
RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各
种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。
RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难
度与大数分解难度等价。即RSA的重大缺陷是无法从理论上把握它的保密性
能如何,而且密码学界多数人士倾向于因子分解不是NPC问题。

RSA的缺点主要有:
A)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次
一密。B)分组长度太大,为保证安全性,n 至少也要 600 bits
以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;
且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。
目前,SET(Secure Electronic Transaction)协议中要求CA采用2048比特长
的密钥,其他实体使用1024比特的密钥。
参考资料:http://superpch.josun.com.cn/bbs/PrintPost.asp?ThreadID=465
CRC加解密算法
http://www.bouncycastle.org/

des 这样够简单了吧
import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;

public class ThreeDes {

private static final String Algorithm = "DESede"; //定义 加密算法,可用 DES,DESede,Blowfish

//keybyte为加密密钥,长度为24字节
//src为被加密的数据缓冲区(源)
public static byte[] encryptMode(byte[] keybyte, byte[] src) {
try {
//生成密钥
SecretKey deskey = new SecretKeySpec(keybyte, Algorithm);

//加密
Cipher c1 = Cipher.getInstance(Algorithm);
c1.init(Cipher.ENCRYPT_MODE, deskey);
return c1.doFinal(src);
} catch (java.security.NoSuchAlgorithmException e1) {
e1.printStackTrace();
} catch (javax.crypto.NoSuchPaddingException e2) {
e2.printStackTrace();
} catch (java.lang.Exception e3) {
e3.printStackTrace();
}
return null;
}

//keybyte为加密密钥,长度为24字节
//src为加密后的缓冲区
public static byte[] decryptMode(byte[] keybyte, byte[] src) {
try {
//生成密钥
SecretKey deskey = new SecretKeySpec(keybyte, Algorithm);

//解密
Cipher c1 = Cipher.getInstance(Algorithm);
c1.init(Cipher.DECRYPT_MODE, deskey);
return c1.doFinal(src);
} catch (java.security.NoSuchAlgorithmException e1) {
e1.printStackTrace();
} catch (javax.crypto.NoSuchPaddingException e2) {
e2.printStackTrace();
} catch (java.lang.Exception e3) {
e3.printStackTrace();
}
return null;
}

//转换成十六进制字符串
public static String byte2hex(byte[] b) {
String hs="";
String stmp="";

for (int n=0;n<b.length;n++) {
stmp=(java.lang.Integer.toHexString(b[n] & 0XFF));
if (stmp.length()==1) hs=hs+"0"+stmp;
else hs=hs+stmp;
if (n<b.length-1) hs=hs+":";
}
return hs.toUpperCase();
}

public static void main(String[] args)
{
//添加新安全算法,如果用JCE就要把它添加进去
Security.addProvider(new com.sun.crypto.provider.SunJCE());

final byte[] keyBytes = {0x11, 0x22, 0x4F, 0x58, (byte)0x88, 0x10, 0x40, 0x38
, 0x28, 0x25, 0x79, 0x51, (byte)0xCB, (byte)0xDD, 0x55, 0x66
, 0x77, 0x29, 0x74, (byte)0x98, 0x30, 0x40, 0x36, (byte)0xE2}; //24字节的密钥
String szSrc = "This is a 3DES test. 测试";

System.out.println("加密前的字符串:" + szSrc);

byte[] encoded = encryptMode(keyBytes, szSrc.getBytes());
System.out.println("加密后的字符串:" + new String(encoded));

byte[] srcBytes = decryptMode(keyBytes, encoded);
System.out.println("解密后的字符串:" + (new String(srcBytes)));
}
}

dfs


java_version的正确结果
Java里面的正常结果的话,这个在输入的过程中只需要将它的程序输入正确,然后那么它所显示的结果也就是正确的了。

星云大师《生死烦恼》
3.邪见(mithy-di):指否定四谛因果道理的见解。抱持邪见者,不惧恶,不行善,在五见中最为邪恶。 4.见取见(drsti-parmarsa):执著错误的见解以为真实。 5.戒禁取见(sila-vrata-parmarsa):执著不正确的戒律,以为可以达到解脱或升天的果报,这种错误的执著见解称为戒禁取见。 五见与六根本烦恼(贪、嗔、痴、慢...

“佛生两树”有什么典故
自从他觉得这种修行,并非正道,便独自离开苦行林中,接受牧女难陀波罗的乳糜供养,恢复到少壮的体力。憍陈如等五人见到这种情形,便认为他受不了苦行的考验,以致道心退堕,非常失望,就离他而去,到达波罗奈国(varanasl)的鹿野苑(Mrgadava)自修苦行去了。 释迦牟尼既已恢复体力,便自入尼连禅河淋浴,洗过去劳形苦志的...

谁有《阿甘正传》的英文台词?
And so to Rome, the eternal city, where the Princess' visit was marked by a spectacular military parade highlighted by the band of the crack Piersa Yeri Regiment. The smiling young Princess showed no sign of the strain of the week's continuous public appearances. And at her country's emba...

芬兰都有哪些城市
60.Jakobstad (Pietarsaari)61.Jalasjärvi 62.Jämijärvi 63.Jämsä64.Janakkala 65.Järvenpää (Träskända)66.Joensuu 67.Jokioinen (Jockis)68.Jomala 69.Joroinen (Jorois)70.Joutsa 71.Juankoski 72.Juuka (Juga)73.Juupajoki...

Y开头的女生英文名
YOLANDA(西班牙语)"紫罗兰"。YOLANDA给人的印象是气质高雅、可静可动的女孩、看起来柔弱、却有令人不可亵渎的气质。YVETTE同YVONNE。人们形容YVETTE是美丽的金发法国女子-懂得人情世故,既聪明又友善,只是有点傲慢。英语姓名的一般结构为:名+中间名+姓。如William.Jafferson.Clinton。但在很多场合中间名...

葫芦岛市18613009965: 请高手指教如何用java编写RSA算法?谢谢
潭欧托马: 你是用rsa算法去加密,还是要自己编写一个rsa算法? RSA是非对称加密算法,可以用它通过KeyPairGenerator来生成KeyPari,它里面有公钥和私钥. 通过Cipher.getInstance("PBEWithMD5AndDES")得到Cipher对象并初始化为加密/解密模式.最doFinal即可完成加解密.除了生成KeyPari外,还可以通过RSA算法的证书和密钥库来得到公/私钥.如果阁下想自己编写一个RSA算法的,本人就无能为力了.

葫芦岛市18613009965: Java 第三方公钥 RSA加密求助 -
潭欧托马: 下面是RSA加密代码./*** RSA算法,实现数据的加密解密.* @author ShaoJiang**/ public class RSAUtil {private static Cipher cipher;static{try {cipher = Cipher.getInstance("RSA");} catch (NoSuchAlgorithmException e) {e....

葫芦岛市18613009965: des与rsa的联系 -
潭欧托马: DES 和 RSA 本身没什么联系,DES 是对称加密算法,也就是加密和解密的密钥是同一个. RSA 是非对称加密算法,它的密钥是一对,用其中一个密钥加密都能用用另外一个来解密.除加密外RSA还能用来做电子签名,DES不行.

葫芦岛市18613009965: 求JAVA编写的RSA加密算法
潭欧托马: 代码如下:main方法用于测试的,不是算法本身. import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; import java.security.SecureRandom; import javax.crypto.Cipher; ...

葫芦岛市18613009965: java中rsa加密解密怎么设置模数 -
潭欧托马: public static RSAPublicKey generateRSAPublicKey(byte[] modulus, byte[] publicExponent) { KeyFactory keyFac = null; try { keyFac = KeyFactory.getInstance("RSA", new org.bouncycastle.jce.provider.BouncyCastleProvider()); } catch (...

葫芦岛市18613009965: 如何用Java做U盾程序 -
潭欧托马: java内置rsa,des算法的,你以一个特定字符串作为key,对java date进行加密应该就ok了吧

葫芦岛市18613009965: JAVA写RSA加密,公钥私钥都是一样的,为什么每次加密的结果不一样? -
潭欧托马: JAVA写RSA加密,私钥都是一样的,公钥每次加密的结果不一样跟对数据的padding(填充)有关.1、Padding (填充)属性定义元素边框与元素内容之间的空间.2、padding 简写属性在一个声明中设置所有内边距属性.设置所有当前或者指定元素内边距属性.该属性可以有1到4个值.3、当元素的 Padding(填充)(内边距)被清除时,所"释放"的区域将会受到元素背景颜色的填充.4、单独使用填充属性是在一个声明中设置元素的所内边距属性.缩写填充属性也可以使用,一旦改变一个数值,则padding对应的距离都会改变.

葫芦岛市18613009965: des算法与rsa算法区别
潭欧托马: des算法是对称算法,加密的密钥和解密的密钥是一样的. rsa算法是非对称算法, 加密密钥和解密密钥不一样,一般加密密钥称为私钥,解密密钥称为公钥,私钥加密后只能用公钥解密, 当然也可以用公钥加密,用私钥解密.

葫芦岛市18613009965: DES算法和RSA算法的不同 -
潭欧托马: des是对称加密,rsa为非队成加密

葫芦岛市18613009965: des和rsa的主要区别 des的主要用途 rsa的主要用途
潭欧托马: DES保密性不好,而RSA保密性强

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网