Source code: com/flexstor/common/util/Encrypt.java
1 /*
2 * Encrypt.java
3 *
4 * Copyright $Date: 2003/08/11 02:22:31 $ FLEXSTOR.net Inc.
5 *
6 * This work is licensed for use and distribution under license terms found at
7 * http://www.flexstor.org/license.html
8 *
9 */
10
11 package com.flexstor.common.util;
12
13 /**
14 * Encrypts or Decrypts a string.
15 *
16 * Based on the Blustone Sapphire/Web class Sa.SaEncrypt
17 */
18 public class Encrypt
19 {
20 private static int thekey = 127;
21
22 private static char getHexChar(int val)
23 {
24 int ival = val % 16;
25 switch (ival)
26 {
27 case 0:
28 return '0';
29
30 case 1:
31 return '1';
32
33 case 2:
34 return '2';
35
36 case 3:
37 return '3';
38
39 case 4:
40 return '4';
41
42 case 5:
43 return '5';
44
45 case 6:
46 return '6';
47
48 case 7:
49 return '7';
50
51 case 8:
52 return '8';
53
54 case 9:
55 return '9';
56
57 case 10:
58 return 'a';
59
60 case 11:
61 return 'b';
62
63 case 12:
64 return 'c';
65
66 case 13:
67 return 'd';
68
69 case 14:
70 return 'e';
71
72 case 15:
73 return 'f';
74
75 default:
76 return 'f';
77 }
78 }
79
80 private static int getHexInt(char val)
81 {
82 switch (val)
83 {
84 case 48:
85 return 0;
86
87 case 49:
88 return 1;
89
90 case 50:
91 return 2;
92
93 case 51:
94 return 3;
95
96 case 52:
97 return 4;
98
99 case 53:
100 return 5;
101
102 case 54:
103 return 6;
104
105 case 55:
106 return 7;
107
108 case 56:
109 return 8;
110
111 case 57:
112 return 9;
113
114 case 97:
115 return 10;
116
117 case 98:
118 return 11;
119
120 case 99:
121 return 12;
122
123 case 100:
124 return 13;
125
126 case 101:
127 return 14;
128
129 case 102:
130 return 15;
131
132 default:
133 return 15;
134 }
135 }
136
137 public static final String encrypt ( String str )
138 {
139 if (str == null || str.length() < 1)
140 return str;
141 StringBuffer sb = new StringBuffer(str);
142 int length = sb.length();
143 for (int i = 0; i < length; i++)
144 {
145 char ch = sb.charAt(i);
146 int temp = ch;
147 temp %= 256;
148 temp += 10 * i;
149 temp += thekey;
150 temp %= 256;
151 ch = (char)temp;
152 sb.setCharAt(i, ch);
153 }
154 int rlength = sb.length();
155 for (int i = 0; i < rlength / 2; i++)
156 {
157 char ch = sb.charAt(i);
158 sb.setCharAt(i, sb.charAt(rlength - i - 1));
159 sb.setCharAt(rlength - i - 1, ch);
160 }
161 StringBuffer hsb = new StringBuffer(2 * length);
162 for (int i = 0; i < length; i++)
163 {
164 char ch = sb.charAt(i);
165 int temp = ch;
166 temp %= 256;
167 int low = temp % 16;
168 int high = temp / 16;
169 char lch = getHexChar(low);
170 char hch = getHexChar(high);
171 hsb.append(hch);
172 hsb.append(lch);
173 }
174 return hsb.toString();
175 }
176
177 public static final String decrypt ( String str )
178 {
179 if (str == null || str.length() < 1)
180 return str;
181 StringBuffer sb = new StringBuffer(str);
182 int length = sb.length();
183 StringBuffer hsb = new StringBuffer(length / 2);
184 for (int i = 0; i < length / 2; i++)
185 {
186 char hch = sb.charAt(2 * i);
187 char lch = sb.charAt(2 * i + 1);
188 int lint = getHexInt(lch);
189 int hint = getHexInt(hch);
190 int temp = lint + 16 * hint;
191 hsb.append((char)temp);
192 }
193 int rlength = hsb.length();
194 for (int i = 0; i < rlength / 2; i++)
195 {
196 char ch = hsb.charAt(i);
197 hsb.setCharAt(i, hsb.charAt(rlength - i - 1));
198 hsb.setCharAt(rlength - i - 1, ch);
199 }
200 length = hsb.length();
201 sb = new StringBuffer(length);
202 for (int i = 0; i < length; i++)
203 {
204 char ch = hsb.charAt(i);
205 int temp = ch;
206 temp %= 256;
207 temp -= thekey;
208 if (temp < 0)
209 temp += 256;
210 temp -= 10 * i;
211 if (temp < 0)
212 temp += 256;
213 if (temp < 0)
214 temp += 256;
215 sb.append((char)temp);
216 }
217 return sb.toString();
218 }
219 }