JAVA动态加密方法其一
来源:互联网 发布:电子翻书软件 编辑:程序博客网 时间:2024/06/05 04:15
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
0 0
- JAVA动态加密方法其一
- java方法的参数传递其一
- Java内存分析 其一
- 其一
- Java中调整字距与行距的方法 其一(以DrawString为例)
- 转载:java加密方法
- JAVA 常用加密方法
- Java常用加密方法
- JAVA MD5加密方法
- Java MD5加密方法
- JAVA MD5加密方法
- JAVA 常用加密方法
- java常用加密方法
- java 加密方法
- java键盘输入加密方法
- java加密方法
- Java MD5加密方法
- java加密、解密方法
- 设计模式—观察者
- 第七章 BIRT分组报表
- NDK CDT JNI开发
- java发送邮件
- HTML5 API——无刷新更新地址 history.pushState/replaceState 方法
- JAVA动态加密方法其一
- 第八章 BIRT交叉报表
- 菜鸟码农的第一次博客
- js中转码(字符转ascii码,ascii码砖字符)
- javascript 闭包
- 第九章 BIRT嵌套报表以及参数的传递
- Mocha 使用教程
- 集合框架之集合类概述
- Eclipse自动补全功能和自动生成作者、日期注释等功能设置