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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 婴儿吐奶瓣和水怎么办 一岁半宝宝频繁喝夜奶怎么办 婴儿腹泻不吃奶怎么办 八个月宝宝脱水怎么办 宝宝呕吐脱水了怎么办 宝宝腹泻没精神怎么办 小孩拉稀没精神怎么办 宝宝拉稀脱水了怎么办 宝宝发烧还拉肚子怎么办 宝宝发烧后腹泻怎么办 吃海鲜拉肚子了怎么办 孕妇吃海鲜腹泻怎么办 稀饭煮焦了怎么办 8月宝宝拉肚子怎么办 满月宝宝38度怎么办 未满月婴儿拉稀怎么办 未满月宝宝拉稀怎么办 满月的宝宝拉稀怎么办 十个月小孩拉肚子怎么办 十个月宝宝脱水怎么办 宝宝拉肚子老不好怎么办 孩子拉稀老不好怎么办 宝宝拉肚子发呕怎么办 刚出生婴儿拉肚子怎么办 宝宝一岁拉肚子怎么办 刚出生宝宝拉肚子怎么办 宝宝出生五天拉肚子怎么办 生完宝宝拉肚子怎么办? 宝宝6天拉肚子怎么办 十天婴儿拉肚子怎么办 十天小孩拉肚子怎么办 肠炎宝宝一直吐怎么办 初生婴儿老打嗝怎么办 小孩一直发低烧怎么办 婴儿喷奶严重怎么办 婴儿吃奶粉漾奶怎么办 新生儿鼻子溢奶怎么办 宝宝吃奶吐了怎么办 婴儿皮肤干燥脱皮怎么办 新生儿皮肤很红怎么办 宝宝身上汗毛多怎么办