1 package de.webman.util.security; 2 3 4 import java.security.*; 5 6 7 13 public class EncryptUtil 14 { 15 16 17 21 private static final String [] BASE64_CHAR = { 22 "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", 23 "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", 24 "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", 25 "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "+", "/" 26 }; 27 28 31 private static final int[] DEC64 = { 32 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 34 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 35 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, 36 -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 37 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, 38 -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 39 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1 40 }; 41 42 47 private static String encodeBase64(String str) { 48 byte[] dig = str.getBytes(); 49 StringBuffer buf = new StringBuffer (); 50 51 int f0 = 0; 52 int r = 0; 53 int state = 0; 54 int j = 0; 55 int d0 = 0; 56 while (j < dig.length) { 57 switch (state) { 58 case 0: 59 d0 = (dig[j] >= 0) ? dig[j] : 256 + dig[j]; 60 f0 = d0 & 0x3f; 61 r = (d0 & 0xc0) >> 6; 62 state = 1; 63 j++; 64 break; 65 case 1: 66 d0 = (dig[j] >= 0) ? dig[j] : 256 + dig[j]; 67 f0 = r | (d0 & 0x0f) << 2; 68 r = (d0 & 0xf0) >> 4; 69 state = 2; 70 j++; 71 break; 72 case 2: 73 d0 = (dig[j] >= 0) ? dig[j] : 256 + dig[j]; 74 f0 = r | (d0 & 0x03) << 4; 75 r = (d0 & 0xfc) >> 2; 76 state = 3; 77 j++; 78 break; 79 case 3: 80 f0 = r; 81 r = 0; 82 state = 0; 83 break; 84 } 85 86 buf.append(BASE64_CHAR[f0]); 87 } 88 89 if (state != 0) 90 buf.append (BASE64_CHAR[r]); 91 92 return buf.toString(); 93 } 94 95 100 private static String decodeBase64(String str) { 101 byte[] dig = str.getBytes(); 102 StringBuffer buf = new StringBuffer (); 103 int rc = 0; 104 int r = 0; 105 int f0 = 0; 106 int d0 = 0; 107 int d1 = 0; 108 int state = 0; 109 for (int j = 0; j < dig.length; j++) { 110 switch (state) { 111 case 0: 112 r = DEC64[(dig[j] >= 0) ? dig[j] : 256 + dig[j]]; 113 f0 = -1; 114 state = 1; 115 break; 116 case 1: 117 d0 = DEC64[(dig[j] >= 0) ? dig[j] : 256 + dig[j]]; 118 f0 = r | ((d0 & 0x03) << 6); 119 r = (d0 & 0x3c) >> 2; 120 state = 2; 121 break; 122 case 2: 123 d0 = DEC64[(dig[j] >= 0) ? dig[j] : 256 + dig[j]]; 124 f0 = r | ((d0 & 0x0f) << 4); 125 r = (d0 & 0x30) >> 4; 126 state = 3; 127 break; 128 case 3: 129 d0 = DEC64[(dig[j] >= 0) ? dig[j] : 256 + dig[j]]; 130 f0 = r | (d0 << 2); 131 r = 0; 132 state = 0; 133 break; 134 } 135 136 if (f0 > 0) 137 buf.append((char)f0); 138 } 139 140 if (state != 0 && r > 0) 141 buf.append((char)r); 142 143 return buf.toString(); 144 } 145 146 151 public static String encrypt(String str) { 152 if (str != null) 153 return encodeBase64(new Encrypter().encrypt(str)); 154 return null; 155 } 156 157 162 public static String decrypt(String str) { 163 if (str != null) 164 return new Encrypter().decrypt(decodeBase64(str)); 165 return null; 166 } 167 168 172 public static void main(String [] args) { 173 174 for (int i = 0; i < args.length; i++) { 175 System.out.println("[" + EncryptUtil.encrypt(args[i]) + "]"); 176 } 177 178 } 179 180 181 182 183 } 184 185 186 187 188 class Encrypter { 189 private static final int C1 = 21777; 190 private static final int C2 = 31709; 191 192 private int r = 42173; 193 194 public int enc(byte b) { 195 return enc((b >= 0) ? b : 256 + b); 196 } 197 198 public int dec(byte b) { 199 return dec((b >= 0) ? b : 256 + b); 200 } 201 202 public int enc(int plain) { 203 int cipher = plain ^ (r >> 8); 204 r = ((cipher + r) * C1 + C2) & 0xffff; 205 return cipher; 206 } 207 208 public int dec(int cipher) { 209 int plain = cipher ^ (r >> 8); 210 r = ((cipher + r) * C1 + C2) & 0xffff; 211 return plain; 212 } 213 214 public String encrypt(String str) { 215 StringBuffer buf = new StringBuffer (); 216 byte b[] = str.getBytes(); 217 218 for (int i = 0; i < b.length; i++) { 219 buf.append((char)enc(b[i])); 220 } 221 222 return buf.toString(); 223 } 224 225 public String decrypt(String str) { 226 byte[] b = str.getBytes(); 227 StringBuffer buf = new StringBuffer (); 228 229 for (int i = 0; i < b.length; i++) { 230 buf.append ((char)dec(b[i])); 231 } 232 return buf.toString(); 233 } 234 } 235 | Popular Tags |