java_加密解密
来源:互联网 发布:linux自动化运维 编辑:程序博客网 时间:2024/05/23 20:06
/** * 加密解密(使用方法直接看最下面的main方法) * @author liupeng * */ public class LiupengEnDe { private static final String liupengKey = "lp_294333475"; private static boolean InitRC4(byte[] pRC4Table, byte[] pKeyTable) { int i; int b=0; int Temp; int KeyLen = pKeyTable.length; //置初值 for(i=0;i<256;i++){ pRC4Table[i]= (byte)i; } //变值 for(i=0;i<256;i++) { b = (b + (pRC4Table[i]& 0x0FF) + (pKeyTable[i % KeyLen]& 0x0ff)) % 256; Temp = (int)pRC4Table[i]; pRC4Table[i] = pRC4Table[b]; pRC4Table[b] = (byte)Temp; } return true; } private static boolean InitBase64(byte[] pDecodeTable, byte[] pBase64Tab) { byte[] tDecodeTable ={ (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, 62 , (byte)255, (byte)255, (byte)255, 63 , 52 , 53 , 54 , 55 , 56 , 57 , 58 , 59 , 60 , 61 , (byte)255, (byte)255, (byte)255, 64 , (byte)255, (byte)255, (byte)255, 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, 26 , 27 , 28 , 29 , 30 , 31 , 32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 , 41 , 42 , 43 , 44 , 45 , 46 , 47 , 48 , 49 , 50 , 51 , (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255,(byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255,(byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)55, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255}; int iLoop; for(iLoop=0;iLoop<234;iLoop++) pDecodeTable[iLoop] = tDecodeTable[iLoop]; for(iLoop=65;iLoop<=90;iLoop++) pBase64Tab[iLoop - 65] = (byte)iLoop; for(iLoop=97;iLoop<=122;iLoop++) pBase64Tab[iLoop - 71] = (byte)iLoop; for(iLoop=0;iLoop<=9;iLoop++) pBase64Tab[iLoop + 52] =(byte)(48+iLoop); pBase64Tab[62] = 43; pBase64Tab[63] = 47; return true; } public static byte[] Base64EncryptByte(byte[] DataIn) { byte[] Base64Tab=new byte[64]; byte[] DecodeTable=new byte[234]; InitBase64(DecodeTable,Base64Tab); byte[] DataTemp = new byte[4]; int iTemp=0; int iLoop=0; int BytesDataIn=0; int BytesDataOut=0; int ExtraBytes=0; byte[] DataOut = null; // BytesDataIn = _mbslen(DataIn); BytesDataIn = DataIn.length; ExtraBytes = BytesDataIn % 3; if(ExtraBytes == 0) BytesDataOut = (BytesDataIn / 3) * 4; else BytesDataOut = ((int)(BytesDataIn / 3) + 1) * 4; DataOut = new byte[BytesDataOut]; for(iLoop = 0;iLoop<=(BytesDataIn - ExtraBytes - 1);iLoop+=3) { DataOut[iTemp] = Base64Tab[((int)((DataIn[iLoop] & 0x0ff) / 4) & 0x03F)]; DataOut[iTemp + 1] = Base64Tab[(DataIn[iLoop] & 0x003) * 16 | ((int)((DataIn[iLoop + 1]&0x0ff) / 16)) & 0x0F]; DataOut[iTemp + 2] = Base64Tab[(DataIn[iLoop + 1] & 0x00F) * 4 | ((int)((DataIn[iLoop + 2]&0x0ff) / 64)) & 0x03]; DataOut[iTemp + 3] = Base64Tab[DataIn[iLoop + 2] & 0x03F]; iTemp += 4; } if(ExtraBytes == 1) { DataTemp[0] = DataIn[BytesDataIn-1]; DataTemp[1] = 0; DataTemp[2] = 0; DataOut[BytesDataOut - 4] = Base64Tab[(int)((DataTemp[0]& 0x0ff) / 4) & 0x3F]; DataOut[BytesDataOut - 3] = Base64Tab[(DataTemp[0] & 0x003) * 16 | (int)((DataTemp[1] & 0x0ff) / 16) & 0x0F]; DataOut[BytesDataOut - 2] = 61; DataOut[BytesDataOut - 1] = 61; } else if (ExtraBytes == 2) { DataTemp[0] = DataIn[BytesDataIn - 2]; DataTemp[1] = DataIn[BytesDataIn - 1]; DataTemp[2] = 0; DataOut[BytesDataOut - 4] = Base64Tab[(int)((DataTemp[0]&0x0ff)/ 4) & 0x3F]; DataOut[BytesDataOut - 3] = Base64Tab[(DataTemp[0] & 0x003) * 16 | (int)((DataTemp[1] & 0x0ff) / 16) & 0x0F]; DataOut[BytesDataOut - 2] = Base64Tab[(DataTemp[1] & 0x00F) * 4 | (int)((DataTemp[2]&0x0ff) / 64) & 0x03]; DataOut[BytesDataOut - 1] = 61; } return DataOut; } public static byte[] Base64DecryptByte(byte[] DataIn) throws Exception { byte[] Base64Tab=new byte[64]; byte[] DecodeTable=new byte[234]; byte[] DataOut = null; InitBase64(DecodeTable,Base64Tab); byte[] DataTemp = new byte[4]; int iTemp=0; int iLoop=0; int BytesDataIn=0; int ExtraBytes=0; BytesDataIn = DataIn.length; if(DataIn[BytesDataIn-1] == 61){ ExtraBytes = 1; if(DataIn[BytesDataIn-2] == 61) ExtraBytes = 2; } int BytesDataOut = (int)((BytesDataIn * 0.75) - ExtraBytes); DataOut = new byte[BytesDataOut]; try{ for(iLoop = 0;iLoop<(BytesDataIn - 5);iLoop+=4){ //DataTemp[0] = DecodeTable[DataIn[iLoop]]; DataTemp[1] = DecodeTable[DataIn[iLoop + 1]]; DataTemp[2] = DecodeTable[DataIn[iLoop + 2]]; //DataTemp[3] = DecodeTable[DataIn[iLoop + 3]]; DataOut[iTemp] = (byte) ((DecodeTable[DataIn[iLoop]] * 4) | ((int)(DataTemp[1] / 16) & 0x03)); DataOut[iTemp + 1] = (byte) (((DataTemp[1] & 0x0F) * 16) | ((int)(DataTemp[2] / 4) & 0x0F)); DataOut[iTemp + 2] = (byte) (((DataTemp[2] & 0x03) * 64) | DecodeTable[DataIn[iLoop + 3]]); iTemp += 3; } } catch (Exception e){ throw new Exception("It is not BASE64 encode string"); } DataTemp[0] = DecodeTable[DataIn[iLoop]]; DataTemp[1] = DecodeTable[DataIn[iLoop + 1]]; DataTemp[2] = DecodeTable[DataIn[iLoop + 2]]; DataTemp[3] = DecodeTable[DataIn[iLoop + 3]]; if(DataTemp[3] == 64 || DataTemp[2] == 64){ if(DataTemp[3] == 64 && DataTemp[2] != 64){ DataTemp[0] = DecodeTable[DataIn[iLoop]]; DataTemp[1] = DecodeTable[DataIn[iLoop + 1]]; DataTemp[2] = DecodeTable[DataIn[iLoop + 2]]; DataOut[iTemp] = (byte) ((DataTemp[0] * 4) | ((int)(DataTemp[1] / 16) & 0x03)); DataOut[iTemp + 1] = (byte) (((DataTemp[1] & 0x0F) * 16) | ((int)(DataTemp[2] / 4) & 0x0F)); return DataOut; }else if(DataTemp[2] == 64){ DataTemp[0] = DecodeTable[DataIn[iLoop]]; DataTemp[1] = DecodeTable[DataIn[iLoop + 1]]; DataOut[iTemp] = (byte) ((DataTemp[0] * 4) | ((int)(DataTemp[1] / 16) & 0x03)); return DataOut; } } DataOut[iTemp] = (byte) ((DataTemp[0] * 4) | ((int)(DataTemp[1] / 16) & 0x03)); DataOut[iTemp + 1] = (byte) (((DataTemp[1] & 0x0F) * 16) | ((int)(DataTemp[2] / 4) & 0x0F)); DataOut[iTemp + 2] = (byte) (((DataTemp[2] & 0x03) * 64) | DataTemp[3]); return DataOut; } public static boolean RC4EnDecryptByte(byte[] Key, byte[] EnDecryptData) { //初始化 byte[] pRC4Table=new byte[256]; InitRC4(pRC4Table,Key); int i,j; int iLoop; int Temp; int EnDecryptDataLen = EnDecryptData.length; //加密数据 i=0; j=0; for(iLoop=0;iLoop<(int)EnDecryptDataLen;iLoop++) { i = (i + 1) % 256; j = (j + pRC4Table[i] & 0x0ff) % 256; Temp = (int)pRC4Table[i]; pRC4Table[i]=pRC4Table[j]; pRC4Table[j]=(byte)Temp; EnDecryptData[iLoop]=(byte)( EnDecryptData[iLoop] ^ (pRC4Table[((pRC4Table[i] & 0x0ff) + (pRC4Table[j] & 0x0ff)) % 256])); } return true; } public static String LiupengEncryptString(String dataIn) { byte[] dataInBytes = dataIn.getBytes(); RC4EnDecryptByte(liupengKey.getBytes(), dataInBytes); byte[] base64Bytes = Base64EncryptByte(dataInBytes); String retString = new String(base64Bytes); return retString; } public static String LiupengEncryptBytes(byte[] dataIn) { RC4EnDecryptByte(liupengKey.getBytes(), dataIn); byte[] base64Bytes = Base64EncryptByte(dataIn); String retString = new String(base64Bytes); return retString; } public static String LiupengDecryptString(String dataIn) throws Exception { byte[] dataInBase64 = Base64DecryptByte(dataIn.getBytes()); RC4EnDecryptByte(liupengKey.getBytes(), dataInBase64); String retString = new String(dataInBase64); return retString; } public static byte[] LiupengDecryptToBytes(String dataIn) throws Exception { byte[] dataInBase64 = Base64DecryptByte(dataIn.getBytes()); RC4EnDecryptByte(liupengKey.getBytes(), dataInBase64); return dataInBase64; } public static String LiupengEncryptString(String dataIn, String userKey) { byte[] dataInBytes = dataIn.getBytes(); StringBuilder sb = new StringBuilder(); sb.append(userKey).append(liupengKey).append(userKey); RC4EnDecryptByte(sb.toString().getBytes(), dataInBytes); byte[] base64Bytes = Base64EncryptByte(dataInBytes); String retString = new String(base64Bytes); return retString; } public static String LiupengDecryptString(String dataIn, String userKey) throws Exception { byte[] dataInBase64 = Base64DecryptByte(dataIn.getBytes()); StringBuilder sb = new StringBuilder(); sb.append(userKey).append(liupengKey).append(userKey); RC4EnDecryptByte(sb.toString().getBytes(), dataInBase64); String retString = new String(dataInBase64); return retString; } public static void main(String[] args) throws Exception{ String JPwd = LiupengEnDe.LiupengEncryptString("1234", "liupeng"); System.out.println(JPwd);//eI8snA== String OPwd = LiupengEnDe.LiupengDecryptString("eI8snA==", "liupeng"); System.out.println(OPwd);//1234 String test = LiupengEnDe.LiupengEncryptString("1234"); System.out.println(test);//WOGKxg== String test1 = LiupengEnDe.LiupengDecryptString("WOGKxg=="); System.out.println(test1);//1234 } }
0 0
- java_加密解密
- java_加密解密
- 加密解密
- 加密解密
- 加密解密
- 加密解密
- 加密解密
- 加密解密
- 加密、解密
- 加密解密
- 加密解密
- 加密解密
- 加密解密
- 加密解密
- 加密解密
- 加密解密
- 加密解密
- 加密解密
- linux内存屏障浅析
- oracle印象之基础
- Java的一些基础笔试题
- lua中的table库
- 素数的实现,质数,判断一个数是不是素数
- java_加密解密
- lua中的string
- 创建eclipse和androidstudio同时支持的android项目
- MFC+HALCON图片本地加载显示
- Uri详解之——Uri结构与代码提取
- 【iOS学习】三、利用UIBezierPath绘图
- ffmpeg增加和提取字幕流
- iPhone之为UIView设置阴影(CALayer的shadowColor,shadowOffset,shadowOpacity,shadowRadius,shadowPath属性)
- Java InputStream层次分析