import java.math.BigInteger;
import java.security.SecureRandom;
import javax.crypto.Cipher;
public class ModeTest
{
public static void main(String args[])
{
// int result = ModeTest.modeOperator(7, 563, 563);
// System.out.println(result);
//
// int result1 = Fermat(563,7);
// System.out.println("Fermat result ="+result1);
testRSA();
}
/**
* 实现a1^a2 mod a3 的运算
* @param a1
* @param a2
* @param a3
* @return
*/
public static int modeOperator(int a1,int a2,int a3)
{
BigInteger b1 = new BigInteger(a1+"");
// BigInteger b2 = new BigInteger(a2+"");
BigInteger b3 = new BigInteger(a3+"");
return b1.pow(a2).mod(b3).intValue();
}
/**
* 费马定理 ,要求p是素数,而且a>0 那么 a**p == a(mod p) ,即a的p次方mode p 与a mode p同余
* @param p
* @param a
* @return
*/
public static int Fermat(int p,int a)
{
//实现要判断p是素数,这个可以同Miller-Rabin算法实现
if(!MillerRabin(p, 1))
{
System.out.println("p is no a prime!");
return -1;
}
return a%p;
}
public static boolean MillerRabin(int n,int t)
{
for(int i=0;i<t;i++)
if(!isPrime(n))
return false;
return true;
}
/**
*
* @param n The number should be tested whether it is a prime.
*/
public static boolean isPrime(int n)
{
int k,q;
SecureRandom random=new SecureRandom();
for(k=0;(((n-1)>>k)&1)==0;k++);
q=(n-1)>>k;
int a=random.nextInt(n);
if(squareMultiply(a, q, n)==1)
return true;
for(int j=0;j<k;j++)
if(squareMultiply(a, (int)Math.pow(2, j)*q, n)==n-1)
return true;
return false;
}
public static int squareMultiply(int a,int b,int p)
{
int x=1,y=a;
int len=(int)Math.ceil((Math.log(b)/Math.log(2)));
for(int i=0;i<len;i++)
{
if(((b>>i)&1)==1)
{
x=(x*y)%p;
}
y=(y*y)%p;
}
return x;
}
public static int [] charToAscii(char cypher[],int c[])
{
int temp[] = new int[cypher.length];
for(int i=0;i<cypher.length;i++)
{
//将字母转换成数字
// cypher[i] = Character.forDigit(cypher[i], 16);
temp[i] = cypher[i];
}
return temp;
}
public static char[] asciiToChar(int c[],char cypher[])
{
char temp[] = new char[c.length];
for(int i=0;i<c.length;i++)
{
temp[i] = (char) c[i];
}
return temp;
}
public static void testRSA()
{
char cypher[]= new String("I LOVE THE PEOPLE'S REPUBLIC OF CHINA").toCharArray();
//对“我爱中华人民共和国”加解密
int c[] = new int[cypher.length];; //用于存放将上面的字符数组转换成16进制数字数组
int a[] = new int[cypher.length];; //用于存放加密的数字数组
int b[] = new int[cypher.length];; //用于存放解密的数字数组
c=charToAscii(cypher,c);//字母变数字的过程
// for(int k1=0;k1<cypher.length;k1++)
// {
// System.out.println(c[k1]);
// System.out.println(cypher[k1]);
// }
System.out.println("plain text:"+new String(cypher));
//选取两个素数p=563,q=823
int n=0, e,fn=0, p=563,q=823,d=0;
n=p*q;fn=(q-1)*(p-1);
//选e与fn互素
for(e=2;e<fn;e+=3)
{
if(EuclidExtend.gcd(e,fn)==1)
break;
}
d=EuclidExtend.compute(e,fn);
System.out.println("密码和密钥e d and n:");;
System.out.println(e+" "+d+" "+n);
//加密过程
System.out.println("加密:");
for(int i=0;i<cypher.length;i++)
{
a[i]=modeOperator(c[i],e,n);
System.out.println(a[i]+" ");
}
System.out.println("解密:");
//解密过程
for(int j=0;j<cypher.length;j++)
{
b[j]=modeOperator(a[j],d,n);
System.out.println(b[j]+" ");
}
}
分享到:
相关推荐
通过对比C++和Java实现RSA算法,可以看出两种语言在实现上的差异主要在于底层操作的抽象程度。C++更注重底层细节,灵活性更高,而Java则提供了更为方便的加密库,简化了加密和解密的过程。无论选择哪种语言,理解RSA...
RSA算法是一种非对称加密算法,它在信息安全领域有着广泛的应用,例如数字签名、数据加密等。在Java中实现RSA公钥和私钥的生成,通常我们会使用Java Cryptography Extension (JCE) 提供的API,如`java.security....
项目使用了JAVA编程语言,并且基于RSA加密算法来实现文件的加密功能。RSA是一种非对称加密算法,它使用一对公钥和私钥进行加密和解密,具有较高的安全性。 在描述中,我们看到的是重复的标题信息,这表明提供的资源...
这个压缩包"js和JAVA实现RSA.zip"显然包含了JavaScript和Java两种编程语言实现RSA加密的示例或库。这两种语言在不同的应用场景中广泛使用,JavaScript常用于前端开发,而Java则常用于后端服务。下面将详细讨论RSA...
以下是一个简单的RSA加密和解密的Java代码片段: ```java import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; import ...
这个“Android RSA加密jar包”就是专为Android平台设计的,用于实现RSA加密和解密功能的Java库。 RSA加密的基本原理是基于两个大素数的乘积,这两个大素数只有乘积关系,很难从结果反推出原始素数。加密过程使用...
文提出了一种分块Java类文件的RSA加密算法,可有效地对较长数据进行加解 密操作,节约加解密时间,提高算法的效率,具有重要的研究意义。 在一个相对比较安全的网络环境下,程序员往往会忽视对自己...
RSA算法是现代公钥密码体制事实上的标准,虽然它有被椭圆曲线密码算法(ECC)取代的局势,但是研究RSA加密算法还有一定的实际意义。深入讨论RSA算法的实现细节,对RSA的快速实现给出一种高效实用算法。
java和android 通用的rsa 加密封装 在android中采用java的填充算法 可以和ios .net跨平台使用 Java是一种高性能、跨平台的面向对象编程语言。它由Sun Microsystems(现在是Oracle Corporation)的James Gosling等人...
在实际应用中,为了提高安全性,通常会采用对称加密(如AES)或非对称加密(如RSA)来保护敏感信息,而这些基本加密算法则更多地用于数据校验和身份验证。在Java中,可以使用`javax.crypto.Cipher`类进行对称加密...
不过,这个话题为我们提供了一个深入了解加密算法和跨平台通信底层机制的机会。 总的来说,"C/C++与Java互通AES加密解密"是一个挑战性的任务,需要对加密算法、数据类型转换、内存管理以及跨平台通信有深入的理解。...
7. **加解密接口**:JCT可能提供了一套统一的API,使得开发者能够方便地调用各种加密算法,而无需深入了解底层实现细节。 8. **文档和源代码**:压缩包中的`jct_doc.zip`可能是JCT工具包的API文档,对于理解和使用...
文件加密软件指的是以某种特殊的算法改变原有的信息数据,使得未...软件采用了成熟先进的加密算法、加密方法和文件系统底层驱动,使文件加密和文件夹加密后的达到超高的加密强度,并且还能够防止被删除、复制和移动。
4. **加密/解密操作**:ET199加密狗可能支持各种加密算法,如AES、RSA等,Java代码可以利用这些功能对数据进行加密或解密。 5. **错误处理**:由于硬件交互可能出现异常,如设备未连接、通信失败等,所以错误处理...
C++的模板和面向对象特性使其能够更好地与GMP库结合,创建出高性能的加密算法实现。 在Xcode 5中,开发者可以利用C++11标准,这为代码带来了更好的可读性和可维护性,同时也能充分利用现代C++的功能,如RAII...
整个工程分四层,实现RSA加密算法的C++核心类库、封装C++核心类库的DLL组件、引用DLL的.Net类、实现文件操作功能的.Net窗体应用程序。2.2节详细介绍各部分的设计与开发。 考虑到工作量,本软件加解密数据没有严格...
标题 "cpp-JNI封装的底层加密实现可跨平台使用" 提及的是在C++中使用JNI(Java Native Interface)来封装底层加密算法,使得这些加密功能可以在不同的操作系统平台上通用。JNI是Java平台的一个核心特性,它允许Java...
这个名为"RSA.rar_rsa"的压缩包文件,显然与RSA加密技术有关,并且基于Java内置的安全库进行了实现。这个实现可能是一个简单的示例或者工具,用于快速进行RSA加解密操作。 首先,我们来了解一下RSA的基本原理。RSA...
Java加密解密工具集JCT(Java Cryptography Toolkit)是一个为开发者提供的实用工具库,它包含了一系列用于数据加密和解密的算法实现。这个工具集主要用于处理安全性问题,特别是对于那些需要在Java应用程序中实现...
描述中的"代码完整"意味着这个工具可能包含了实现这些加密算法的源代码,这对于开发者来说是一份宝贵的资源。他们可以研究代码,理解加密过程,甚至根据需求进行定制和优化。同时,高效性指出这个工具在执行加密和...