24小时接单的黑客网站

破解教程,破解软件,破解补丁,破解密码,破解软件下

ibmrsa破解(ibmspss破解版下载方法)

本文目录一览:

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比特的密钥。

RSA算法加解密 写出写出简单加解密过程给我 谢谢大家了!!!

import java.security.*;

import java.security.interfaces.*;

import java.math.*;

import java.io.*;

public class Password_Test {

public static void main(String[] args) {

try {

new Password_Test();

Encryption_RSA();

} catch (Exception e) {

e.printStackTrace();

}

}

public Password_Test() throws Exception {// 构造方法 创建公钥和私钥

KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");//生成实现RSA算法的KeyPairGenerator对象。

kpg.initialize(1024);// 初始化确定密钥的大小

KeyPair kp = kpg.genKeyPair();// 生成密钥对

PublicKey pbkey = kp.getPublic();// 创建公钥

PrivateKey prkey = kp.getPrivate();// 创建私钥

// 保存公钥

FileOutputStream file1 = new FileOutputStream("D:/temp/Skey_RSA_pub.dat");

ObjectOutputStream ob1 = new ObjectOutputStream(file1);//创建ObjectOutputStream对象

ob1.writeObject(pbkey); //将指定的对象写入 ObjectOutputStream。

// 保存私钥

FileOutputStream file2 = new FileOutputStream("D:/temp/Skey_RSA_priv.dat");

ObjectOutputStream ob2 = new ObjectOutputStream(file2);

ob2.writeObject(prkey);

}

public static void Encryption_RSA() throws Exception {

System.out.println("根据公钥生成密文:"+"\n");

String string = "I am a student";

// 获取公钥及参数e,n

FileInputStream f_in = new FileInputStream("D:/temp/Skey_RSA_pub.dat");

ObjectInputStream o_in = new ObjectInputStream(f_in);

RSAPublicKey pbk = (RSAPublicKey) o_in.readObject();

BigInteger e = pbk.getPublicExponent();//返回此公钥的指数

BigInteger n = pbk.getModulus();//返回此公钥的模

System.out.println("公钥的指数 e= " + e);

System.out.println("公钥的模 n= " + n);

// 明文 bit

byte bt[] = string.getBytes("UTF8");

BigInteger bit = new BigInteger(bt);

// 计算密文c,打印

BigInteger mi = bit.modPow(e, n);//生成密文

System.out.println("生成密文为: " + mi+"\n\n");//打印密文

// 保存密文

String save = mi.toString();

BufferedWriter out = new BufferedWriter(new OutputStreamWriter(

new FileOutputStream("D:/temp/Enc_RSA.dat")));

out.write(save, 0, save.length());

out.close();

Decrypt_RSA();

}

public static void Decrypt_RSA() throws Exception {

System.out.println("根据私钥破解密文:"+"\n");

// 读取密文

BufferedReader in = new BufferedReader(new InputStreamReader(

new FileInputStream("D:/temp/Enc_RSA.dat")));

String ctext = in.readLine();

BigInteger mi = new BigInteger(ctext);

// 读取私钥

FileInputStream f = new FileInputStream("D:/temp/Skey_RSA_priv.dat");

ObjectInputStream b = new ObjectInputStream(f);

RSAPrivateKey prk = (RSAPrivateKey) b.readObject();

BigInteger d = prk.getPrivateExponent();//返回此私钥的指数

BigInteger n = prk.getModulus();//返回此私钥的模

System.out.println("私钥的指数 d= " + d);

System.out.println("私钥的模 n= " + n);

BigInteger jie = mi.modPow(d, n);//进行解密操作

System.out.println("m= " + jie); // 显示解密结果

byte[] mt = jie.toByteArray();

System.out.println("解密后的文本内容为: ");

for (int i = 0; i mt.length; i++) {

System.out.print((char) mt[i]);

}

}

}

rsa算法的攻击方法有哪些

1 密码破译者知道的信息

密文:可以通过窃听来获取。

数E和N:公钥是公开的信息,因此密码破译者知道E和N。 

2 密码破译者不知道的信息

明文:需要破译的内容。

数D:私钥至少D是不知道的信息。

其他:密码破译者不知道生成密钥对时所使用的p、q和L

二 通过密文来求明文

RSA的加密过程如下。

密文=明文的E次方 mod N

由于密码破译者知道密文、E和N,那么有没有一种方法能够用E次方 mod N之后的密文求出原来的明文呢?如果没有 mod

N的话,即:

密文=明文的E次方

通过密文求明文的难度不大,因为这可以被看作是一个求对数的问题。

但是,加上 mod N之后,求明文就变成了求离散对数的问题,这是非常困难的,因为人类还没有发现求离散对数的高效算法。

三 通过暴力破解来找出D

只要知道数D,就能够对密文进行解密。因此,可以逐一尝试有可能作为D的数字来破译RSA,也就是暴力破解法。暴力破解的难度会随着D的长度增加而变大,当D足够长时,就不可能在现实的时间内通过暴力破解找出数D。

现在,RSA中所使用的p和q的长度都在1024比特以上,N的长度为2048比特以上。由于E和D的长度可以和N差不多,因此要找出D,就需要进行2048比特以上的暴力破解。要在这样的长度下用暴力破解找出D是极其困难的。

  • 评论列表:
  •  断渊瑰颈
     发布于 2022-10-07 12:26:44  回复该评论
  • 一尝试有可能作为D的数字来破译RSA,也就是暴力破解法。暴力破解的难度会随着D的长度增加而变大,当D足够长时,就不可能在现实的时间内通过暴力破解找出数D。现在,RSA中所使用的p和q的长度都在1024比特以上,N的长度为2048比特以上。由于E和D的长度可以和N差
  •  笙沉听净
     发布于 2022-10-07 09:54:27  回复该评论
  • ctOutputStream(file2); ob2.writeObject(prkey); } public static void Encryption_RSA() throws Exception { System.ou
  •  柔侣各空
     发布于 2022-10-07 12:36:54  回复该评论
  • t = new BigInteger(bt); // 计算密文c,打印 BigInteger mi = bit.modPow(e, n);//生成密文 System.out.println("生成密文为: " + mi+"\n
  •  断渊绾痞
     发布于 2022-10-07 10:25:09  回复该评论
  • ext = in.readLine(); BigInteger mi = new BigInteger(ctext); // 读取私钥 FileInput
  •  森槿空名
     发布于 2022-10-07 10:40:59  回复该评论
  • ;//打印密文 // 保存密文 String save = mi.toString(); BufferedWriter out = new BufferedWri

发表评论:

Powered By

Copyright Your WebSite.Some Rights Reserved.