mirror of https://github.com/Rekoe/rk_svnadmin
rekoe
9 years ago
2 changed files with 161 additions and 0 deletions
@ -0,0 +1,118 @@
|
||||
package com.rekoe.utils; |
||||
|
||||
import java.security.MessageDigest; |
||||
import java.security.NoSuchAlgorithmException; |
||||
|
||||
/** |
||||
* 加密工具 |
||||
* |
||||
* @author <a href="mailto:yuanhuiwu@gmail.com">Huiwu Yuan</a> |
||||
* @since 1.0 |
||||
*/ |
||||
public class EncryptUtil { |
||||
/** |
||||
* |
||||
*/ |
||||
private static final String cvt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz0123456789#@$"; |
||||
|
||||
/** |
||||
* |
||||
*/ |
||||
private static final int fillchar = '*'; |
||||
|
||||
/** |
||||
* 加密 |
||||
* |
||||
* @param str |
||||
* 明文 |
||||
* @return 密文 |
||||
*/ |
||||
public static String encrypt(String str) { |
||||
byte[] data = str.getBytes(); |
||||
int c; |
||||
int len = data.length; |
||||
StringBuffer ret = new StringBuffer(((len / 3) + 1) * 4); |
||||
for (int i = 0; i < len; ++i) { |
||||
c = (data[i] >> 2) & 0x3f; |
||||
ret.append(cvt.charAt(c)); |
||||
c = (data[i] << 4) & 0x3f; |
||||
if (++i < len) { |
||||
c |= (data[i] >> 4) & 0x0f; |
||||
} |
||||
ret.append(cvt.charAt(c)); |
||||
if (i < len) { |
||||
c = (data[i] << 2) & 0x3f; |
||||
if (++i < len) { |
||||
c |= (data[i] >> 6) & 0x03; |
||||
} |
||||
ret.append(cvt.charAt(c)); |
||||
} else { |
||||
++i; |
||||
ret.append((char) fillchar); |
||||
} |
||||
if (i < len) { |
||||
c = data[i] & 0x3f; |
||||
ret.append(cvt.charAt(c)); |
||||
} else { |
||||
ret.append((char) fillchar); |
||||
} |
||||
} |
||||
return ret.toString(); |
||||
} |
||||
|
||||
/** |
||||
* 解密 |
||||
* |
||||
* @param str |
||||
* 密文 |
||||
* @return 明文 |
||||
*/ |
||||
public static String decrypt(String str) { |
||||
byte[] data = str.getBytes(); |
||||
int c, c1; |
||||
int len = data.length; |
||||
StringBuffer ret = new StringBuffer((len * 3) / 4); |
||||
for (int i = 0; i < len; ++i) { |
||||
c = cvt.indexOf(data[i]); |
||||
++i; |
||||
c1 = cvt.indexOf(data[i]); |
||||
c = ((c << 2) | ((c1 >> 4) & 0x3)); |
||||
ret.append((char) c); |
||||
if (++i < len) { |
||||
c = data[i]; |
||||
if (fillchar == c) { |
||||
break; |
||||
} |
||||
c = cvt.indexOf((char) c); |
||||
c1 = ((c1 << 4) & 0xf0) | ((c >> 2) & 0xf); |
||||
ret.append((char) c1); |
||||
} |
||||
if (++i < len) { |
||||
c1 = data[i]; |
||||
if (fillchar == c1) { |
||||
break; |
||||
} |
||||
c1 = cvt.indexOf((char) c1); |
||||
c = ((c << 6) & 0xc0) | c1; |
||||
ret.append((char) c); |
||||
} |
||||
} |
||||
return ret.toString(); |
||||
} |
||||
|
||||
/** |
||||
* apache SHA1 加密 |
||||
* |
||||
* @param str |
||||
* 明文 |
||||
* @return 密文 |
||||
*/ |
||||
public static String encriptSHA1(String str) { |
||||
try { |
||||
return new sun.misc.BASE64Encoder().encode(MessageDigest.getInstance("SHA1").digest(str.getBytes())); |
||||
} catch (NoSuchAlgorithmException e) { |
||||
e.printStackTrace(); |
||||
throw new RuntimeException(e); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,43 @@
|
||||
/** |
||||
* |
||||
*/ |
||||
package com.rekoe.utils; |
||||
|
||||
import com.rekoe.domain.Usr; |
||||
|
||||
/** |
||||
* 为当前的线程提供登录的用户 |
||||
* |
||||
*/ |
||||
public class UsrProvider { |
||||
|
||||
private static final ThreadLocal<Usr> USR_THREAD_LOCAL = new ThreadLocal<Usr>(); |
||||
|
||||
/** |
||||
* @return 当前的用户 |
||||
*/ |
||||
public static Usr getCurrentUsr() { |
||||
Usr usr = USR_THREAD_LOCAL.get(); |
||||
if (usr == null) { |
||||
throw new RuntimeException("当前线程没有设置用户!"); |
||||
} |
||||
return usr; |
||||
} |
||||
|
||||
/** |
||||
* 设置当前的用户到当前线程中 |
||||
* |
||||
* @param usr |
||||
* 用户 |
||||
*/ |
||||
public static void setUsr(Usr usr) { |
||||
USR_THREAD_LOCAL.set(usr); |
||||
} |
||||
|
||||
/** |
||||
* 清空线程的用户 |
||||
*/ |
||||
public static void removeUsr() { |
||||
USR_THREAD_LOCAL.remove(); |
||||
} |
||||
} |
Loading…
Reference in new issue