RSA 算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。虽然秘密密钥SK是由公开密钥PK决定的,但却不能根据PK计算出SK。
数字签名:就是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。
公钥:是与私钥算法一起使用的密钥对的非秘密一半。公钥通常用于加密会话密钥、验证数字签名,或加密可以用相应的私钥解密的数据。公钥和私钥是通过一种算法得到的一个密钥对(即一个公钥和一个私钥)其中的一个向外界公开,称为公钥;另一个自己保留,称为私钥。通过这种算法得到的密钥对能保证在世界范围内是唯一的。使用这个密钥对的时候,如果用其中一个密钥加密一段数据,必须用另一个密钥解密。
DES:数据加密算法(Data Encryption Algorithm,DEA)是一种对称加密算法。DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位(每组的第8位作为奇偶校验位),产生最大 64 位的分组大小。这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密的文本块分成两半。使用子密钥对其中一半应用循环功能,然后将输出与另一半进行“异或”运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。DES 使用 16 轮循环,使用异或,置换,代换,移位操作四种基本运算。
2.1 代码
- int isPrime(long a){
- for(long y=2;y<=a/2;y++){
- if(a%y==0)
- {
- return 0;
- }
- }
- return 1;
- }
2.2 代码
- long createRndInteger(int n){
- int x=1,y=1;
- for(int r=0;r<n-1;r++){
- x=x*2;
- }//令x=2的n-1次幂
- y=x*2;//令y=(2的n次幂)
- long number=y-new Random().nextInt(x);
- return number;
- }
- int isPrime(long a){
- for(long y=2;y<=a/2;y++){
- if(a%y==0)
- {
- return 0;
- }
- }
- return 1;
- }
- long createRndInteger(int n){
- int x=1,y=1;
- for(int r=0;r<n-1;r++){
- x=x*2;
- }//令x=2的n-1次幂
- y=x*2;//令y=(2的n次幂)
- long number=y-new Random().nextInt(x);
- return number;
- }
- long createRndPrime(int n){
- long m=createRndInteger(n);
- if(isPrime(m))
- return m;
- else
- createRndPrime(n);
- }