JAVA动态加密方法其一
2015-01-13 10:56
295 查看
package net.jeeshop.core.util; import java.util.ArrayList; import java.util.List; import java.util.Random; /** * 文本加密/解密 (可以把正常文本加密为类似"3E24D795C1E8BAC38986E4D1B4DDB2B4C081E485334532334532"的密文) * */ public class StringEncryptionUtils { public static void main(String[] args){ String data="这里是要加密的内容123456"; String pswd="123456hijk"; String Ret=Encrypt(data,pswd); System.out.println("第一次加密结果:"+Ret); Ret=Decrypt(Ret,pswd); System.out.println("第一次解密结果:"+Ret); Ret=Encrypt(data,pswd); System.out.println("第二次加密结果:"+Ret); Ret=Decrypt(Ret,pswd); System.out.println("第二次解密结果:"+Ret); } /** * String 加密 * * @param (String 数据,String 密码) * @return String 加密后的String */ public static String Encrypt(String Data,String Password) { Random rand = new Random(); int ra=rand.nextInt(); int rb=rand.nextInt(); String mod= Integer.toHexString( ra^rb).toUpperCase(); mod=mod+"00000"; mod=mod.substring(0, 4); int aLen=Data.getBytes().length; int bLen=Password.getBytes().length; int clen=mod.getBytes().length; String result=""; String temp=""; for(int i=0,j=0,k=0;i<aLen;i++){ int a=Data.getBytes()[i]; int b=Password.codePointAt(j); int c=mod.codePointAt(k); temp = Integer.toHexString(a^b^c).toUpperCase(); temp="00000"+temp; temp=temp.substring(temp.length()-2, temp.length()); result=result+temp; j+=1; k+=1; if(j+1==bLen)j=0; if(k+1==clen)k=0; } return mod+result; } /** * String 解密 * * @param (String 已加密的数据,String 密码) * @return String 解密出来的String */ public static String Decrypt(String Data,String Password) { if(Data.length()<4)return Data; String resultString=""; String mod=""; mod=Data.substring(0, 4); Data=Data.substring(4); int aLen=Data.length(); int bLen=Password.length(); int cLen=mod.length(); int j=0; int k=0; byte[] data=new byte[aLen/2]; for(int i=0;i<aLen;i+=2){ data[i/2]=(byte) (HexToFirstInt( Data.substring(i, i+2))^Password.codePointAt(j)^mod.codePointAt(k)); j = j + 1; k = k + 1; if (j == bLen-1)j = 0; if (k == cLen-1)k = 0; } resultString = new String(data); return resultString; } /** * Int 十六进制文本返回第一个Byte * * @param (String 十六进制文本) * @return Int 第一个Byte */ private static int HexToFirstInt(String HexStr){ if(HexStr.length()==0){ HexStr="0"; } if(HexStr.length()%2==1){ HexStr="0"+HexStr; } int tempa=0; int tempb=0; byte[] bytes=HexStr.getBytes(); int i=0; if(bytes[i]<58){ tempa=bytes[i]-48; }else{ tempa=bytes[i]-55; } if(bytes[i+1]<58){ tempb=bytes[i+1]-48; }else{ tempb=bytes[i+1]-55; } return ((tempa*16)+tempb); } /** * List<String> 把String解密成List<String> * * @param (String 已加密数据) * @return List<String> 数组 */ public static List<String> Trans(String Data){ String tempda=Decrypt(Data, GetDefaultPass()); String[] tempS = tempda.split("\\|\\|"); List<String> ret= new ArrayList<String>(); for(int i=0;i<tempS.length;i++){ ret.add(Decrypt(tempS[i], GetDefaultPass()) ); } return ret; } /** * String 把List<String>加密成String * * @param (List<String> 数组) * @return String 已加密数据 */ public static String Trans(List<String> Data){ if(Data.size()<=0){ return ""; }else{ String ret = Encrypt(Data.get(0), GetDefaultPass()); for(int i=1;i<Data.size();i++){ ret=ret+"||"+Encrypt(Data.get(i), GetDefaultPass()); } return Encrypt(ret, GetDefaultPass()); } } public static String GetDefaultPass(){ return "123456"; } }
测试参数:
String data="这里是要加密的内容123456";
String pswd="123456hijk";
测试结果:
第一次加密结果:3E24D795C1E8BAC38986E4D1B4DDB2B4C081E485334532334532
第一次解密结果:这里是要加密的内容123456
第二次加密结果:18B9D5E8B1EAC7B38BFB94D3C9ADB0C9B08399F5313842313842
第二次解密结果:这里是要加密的内容123456
相关文章推荐
- 四种动态生成Java代码的方法(二)
- 由Java程序注册机联想到商业版程序的加密方法
- 转载:java加密方法
- 动态编译Java并通过反射执行方法
- JAVA动态代理实现方法
- 收集java的常用方法代码-MD5和一个可逆加密算法相接合的加密和解密程序
- 动态生成JAVA代码的方法zz
- 动态构造 Java 类的一种方法: ClassLoader 的设计 (4)
- 动态构造 Java 类的一种方法: javassist (3)
- 动态java代码的使用方法
- 由Java程序注册机联想到商业版程序的加密方法
- Java 反射进行动态方法调用
- Java动态调用WebService方法
- [转]JAVA调用动态库方法说明
- Java - 简单加密-解密方法包装, 含encode(),decode(),md5()
- Java动态调用类方法实例
- 在JAVA中动态执行类的静态方法
- java中动态载入类、方法的几个玩意儿
- Java动态调用方法
- 动态构造 Java 类的一种方法: javassist (2)