📄 ras_encrypt_decrypt.java
字号:
package eise.tools;//------------------------------------------------------------------------------/** * <p>Title: EISE加密程序</p> * <p>Description: 采用RSA算法加密一个字串</p> * <p>Copyright: Copyright (c) 2005-2006 By EISE Development Team</p> * <p>Company: EISE Development Team</p> * @author Zhan Hongfei * @version 1.0 *///------------------------------------------------------------------------------import java.math.*;import javax.swing.*;//------------------------------------------------------------------------------public class RAS_Encrypt_Decrypt extends JFrame { private static String P="229";//一定要是素数,由用户指定 private static String Q="197";//一定要是素数,由用户指定 private String PQ="-1";//由PQ计算得到 private String EDM="-1";//由PQ计算得到 private String M="-1";//由PQ计算得到//-----上面参数只是计算用的,下面的参数是加密与解决要用的-------------------------------- private String E="-1";//由PQ计算得到 private String D="-1";//由PQ计算得到 private String N="-1";//由PQ计算得到//------------------------------------------------------------------------------ public RAS_Encrypt_Decrypt(){ this(P,Q); }//------------------------------------------------------------------------------ public RAS_Encrypt_Decrypt(String p,String q){ P=p;Q=q; java.math.BigInteger biginteger = new BigInteger("1"); java.math.BigInteger biginteger1 = new BigInteger(p); java.math.BigInteger biginteger3 = new BigInteger(q); java.math.BigInteger n_biginteger = biginteger1.multiply(biginteger3); java.math.BigInteger biginteger5 = biginteger1.subtract(biginteger); java.math.BigInteger biginteger7 = biginteger3.subtract(biginteger); java.math.BigInteger pq_biginteger = biginteger5.multiply(biginteger7); if(!biginteger1.isProbablePrime(10)){return;} if(!biginteger3.isProbablePrime(10)){return;} N=n_biginteger.toString(); PQ=pq_biginteger.toString(); java.math.BigInteger biginteger15 = biginteger.add(biginteger); java.math.BigInteger biginteger16 = biginteger.add(biginteger); for(java.math.BigInteger biginteger17=new BigInteger("0"); biginteger15.compareTo(n_biginteger)<0&&biginteger17.intValue()!=1;biginteger17=pq_biginteger.gcd(biginteger15)){biginteger15 = biginteger15.add(biginteger);} biginteger16 = biginteger15; E=biginteger16.toString(); java.math.BigInteger biginteger19 = biginteger16.modInverse(pq_biginteger); D=biginteger19.toString(); java.math.BigInteger biginteger21 = biginteger16.multiply(biginteger19); biginteger21 = biginteger21.subtract(biginteger); EDM=biginteger21.toString(); }//------------------------------------------------------------------------------ public String encryptString(String text){ String characternumbers="";//被加密的文字的整形表示码,每个字符的编码之间用空格分隔 String characterbinary="";//被加密的文字的字节码,每个字符的编码之间用空格分隔 String codeblocks=""; String s8="";////被加密的文字的字节码,每个字符的编码之间无空格 String encryptednumbers="";//被加密后的字节码,每个字符的编码之间用空格分隔 String encryptedmessage="";//被加密后的文字 String binaryblocks=""; java.math.BigInteger e_biginteger = new BigInteger(E); java.math.BigInteger n_biginteger = new BigInteger(N); int k=0; byte byte0=2; for(int i=0;i<text.length();i++) {java.lang.String s6=text.substring(i,i+1); //-----拿到一个个的字符-------------------------------------------- char c=text.charAt(i); //-----把字符转化为字节-------------------------------------------- java.lang.String s=java.lang.Integer.toBinaryString(c); //-----不够8位的补到8位------------------------------------------- for(int l=s.length();l<8;l++){s="0"+s;} java.lang.String s5 = (new Integer(c)).toString(); characternumbers=characternumbers+s5+" "; characterbinary=characterbinary+s+" "; s8=s8+s; k++; if(k==byte0) {java.math.BigInteger biginteger10=new BigInteger(s8,2); codeblocks=codeblocks+biginteger10.toString()+" "; java.math.BigInteger biginteger13=biginteger10.modPow(e_biginteger, n_biginteger); java.lang.String s2=biginteger13.toString(); encryptednumbers=encryptednumbers+s2+" "; for(int i1=0;i1<s2.length();i1+=2) {byte byte1; if(s2.length()-i1 > 1){byte1 = 2;} else{byte1 = 1;} java.lang.Integer integer = new Integer(s2.substring(i1, i1 + byte1)); char c1 = (char)integer.intValue(); encryptedmessage=encryptedmessage+c1; } k = 0; s8 = ""; } } if(k>0&&k<byte0) {for(int j1 = k; j1 < byte0; j1++) s8 = "00000000" + s8; binaryblocks=binaryblocks+s8+" "; java.math.BigInteger biginteger11 = new BigInteger(s8, 2); codeblocks=codeblocks+biginteger11+" "; java.math.BigInteger biginteger14 = biginteger11.modPow(e_biginteger, n_biginteger); java.lang.String s3 = biginteger14.toString(); encryptednumbers=encryptednumbers+s3+" "; for(int k1 = 0; k1 < s3.length(); k1 += 2) {byte byte2; if(s3.length()-k1>1){byte2 = 2;} else{byte2 = 1;} java.lang.Integer integer1 = new Integer(s3.substring(k1, k1 + byte2)); char c2 = (char)integer1.intValue(); encryptedmessage=encryptedmessage+c2; } } return encryptednumbers; }//------------------------------------------------------------------------------ public String decryptString(String text){ String numberstodecrypt=""; String decryptednumbers=""; String decryptedmessage=""; java.math.BigInteger biginteger2 = new BigInteger(D); java.math.BigInteger biginteger4 = new BigInteger(N); java.lang.String s11=text; int i2; for(int j=0;j<s11.length();j=i2+1) {int l1 = j; i2 = s11.indexOf(' ', j); java.lang.String s9 = s11.substring(l1, i2); java.math.BigInteger biginteger18 = new BigInteger(s9, 10); numberstodecrypt=numberstodecrypt+biginteger18.toString()+" "; java.math.BigInteger biginteger20 = biginteger18.modPow(biginteger2, biginteger4); java.lang.String s4 = biginteger20.toString(); decryptednumbers=decryptednumbers+s4+" "; java.lang.String s1 = java.lang.Integer.toBinaryString(biginteger20.intValue()); for(int j2=s1.length();j2<16;j2++){s1="0"+s1;} decryptednumbers=decryptednumbers+"'"+s1+"' "; for(int k2=1;k2<=2;k2++) {java.lang.String s10 = s1.substring((k2 - 1) * 8, k2 * 8); if(!s10.equals("00000000")) {java.math.BigInteger biginteger22 = new BigInteger(s10, 2); int l2 = biginteger22.intValue(); char c3 = (char)l2; decryptedmessage=decryptedmessage+c3; } } } return decryptedmessage; }//------------------------------------------------------------------------------ public static void main(String[] args){ RAS_Encrypt_Decrypt machine=new RAS_Encrypt_Decrypt("229","197"); String text="the Hong kong Polytechnic University and Zhejiang University."; String encrypted_text=machine.encryptString(text); String decrypt_text=machine.decryptString(encrypted_text); System.out.println("original_text="+text); System.out.println("encrypted__text="+encrypted_text); System.out.println("decrypt__text="+decrypt_text); }//------------------------------------------------------------------------------}//end of class//------------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -