package com.shadow.security.util;
/**
*
* 自定义MD5加密工具实现类(不支持逆转运算以及附加盐值)
*
* @author shadow
* @email 124010356@qq.com
* @create 2012.04.28
*/
public class MD5EncoderCustomer implements Encoder {
private static final int S11 = 7;
private static final int S12 = 12;
private static final int S13 = 17;
private static final int S14 = 22;
private static final int S21 = 5;
private static final int S22 = 9;
private static final int S23 = 14;
private static final int S24 = 20;
private static final int S31 = 4;
private static final int S32 = 11;
private static final int S33 = 16;
private static final int S34 = 23;
private static final int S41 = 6;
private static final int S42 = 10;
private static final int S43 = 15;
private static final int S44 = 21;
private static final byte[] PADDING = { -128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0 };
private long[] state = new long[4];// state (ABCD)
private long[] count = new long[2];// number of bits, modulo 2^64 (lsb//
// first)
private byte[] buffer = new byte[64]; // input buffer
private String digestHexStr;
private byte[] digest = new byte[16];
private MD5EncoderCustomer() {
md5Init();
return;
}
public String encrypt(String password) {
md5Init();
md5Update(password.getBytes(), password.length());
md5Final();
digestHexStr = "";
for (int i = 0; i < 16; i++) {
digestHexStr += byte2Hex(digest[i]);
}
return digestHexStr;
}
public String decrypt(String password, String key) {
throw new UnsupportedOperationException("Not support the method");
}
public String encrypt(String password, String salt) {
return encrypt(password);
}
private void md5Init() {
count[0] = 0L;
count[1] = 0L;
// Load magic initialization constants.
state[0] = 0x67452301L;
state[1] = 0xefcdab89L;
state[2] = 0x98badcfeL;
state[3] = 0x10325476L;
return;
}
private long F(long x, long y, long z) {
return (x & y) | ((~x) & z);
}
private long G(long x, long y, long z) {
return (x & z) | (y & (~z));
}
private long H(long x, long y, long z) {
return x ^ y ^ z;
}
private long I(long x, long y, long z) {
return y ^ (x | (~z));
}
private long FF(long a, long b, long c, long d, long x, long s, long ac) {
a += F(b, c, d) + x + ac;
a = ((int) a << s) | ((int) a >>> (32 - s));
a += b;
return a;
}
private long GG(long a, long b, long c, long d, long x, long s, long ac) {
a += G(b, c, d) + x + ac;
a = ((int) a << s) | ((int) a >>> (32 - s));
a += b;
return a;
}
private long HH(long a, long b, long c, long d, long x, long s, long ac) {
a += H(b, c, d) + x + ac;
a = ((int) a << s) | ((int) a >>> (32 - s));
a += b;
return a;
}
private long II(long a, long b, long c, long d, long x, long s, long ac) {
a += I(b, c, d) + x + ac;
a = ((int) a << s) | ((int) a >>> (32 - s));
a += b;
return a;
}
private void md5Update(byte[] inbuf, int inputLen) {
int i, index, partLen;
byte[] block = new byte[64];
index = (int) (count[0] >>> 3) & 0x3F;
// Update number of bits
if ((count[0] += (inputLen << 3)) < (inputLen << 3))
count[1]++;
count[1] += (inputLen >>> 29);
partLen = 64 - index;
// Transform. as many times as possible.
if (inputLen >= partLen) {
md5Memcpy(buffer, inbuf, index, 0, partLen);
md5Transform(buffer);
for (i = partLen; i + 63 < inputLen; i += 64) {
md5Memcpy(block, inbuf, 0, i, 64);
md5Transform(block);
}
index = 0;
} else {
i = 0;
}
// Buffer remaining input
md5Memcpy(buffer, inbuf, index, i, inputLen - i);
}
private void md5Final() {
byte[] bits = new byte[8];
int index, padLen;
// Save number of bits
Encode(bits, count, 8);
// Pad out to 56 mod 64.
index = (int) (count[0] >>> 3) & 0x3f;
padLen = (index < 56) ? (56 - index) : (120 - index);
md5Update(PADDING, padLen);
// Append length (before padding)
md5Update(bits, 8);
// Store state in digest
Encode(digest, state, 16);
}
private void md5Memcpy(byte[] output, byte[] input, int outpos, int inpos,
int len) {
int i;
for (i = 0; i < len; i++)
output[outpos + i] = input[inpos + i];
}
private void md5Transform(byte block[]) {
long a = state[0], b = state[1], c = state[2], d = state[3];
long[] x = new long[16];
decode(x, block, 64);
// Round 1
a = FF(a, b, c, d, x[0], S11, 0xd76aa478L); /* 1 */
d = FF(d, a, b, c, x[1], S12, 0xe8c7b756L); /* 2 */
c = FF(c, d, a, b, x[2], S13, 0x242070dbL); /* 3 */
b = FF(b, c, d, a, x[3], S14, 0xc1bdceeeL); /* 4 */
a = FF(a, b, c, d, x[4], S11, 0xf57c0fafL); /* 5 */
d = FF(d, a, b, c, x[5], S12, 0x4787c62aL); /* 6 */
c = FF(c, d, a, b, x[6], S13, 0xa8304613L); /* 7 */
b = FF(b, c, d, a, x[7], S14, 0xfd469501L); /* 8 */
a = FF(a, b, c, d, x[8], S11, 0x698098d8L); /* 9 */
d = FF(d, a, b, c, x[9], S12, 0x8b44f7afL); /* 10 */
c = FF(c, d, a, b, x[10], S13, 0xffff5bb1L); /* 11 */
b = FF(b, c, d, a, x[11], S14, 0x895cd7beL); /* 12 */
a = FF(a, b, c, d, x[12], S11, 0x6b901122L); /* 13 */
d = FF(d, a, b, c, x[13], S12, 0xfd987193L); /* 14 */
c = FF(c, d, a, b, x[14], S13, 0xa679438eL); /* 15 */
b = FF(b, c, d, a, x[15], S14, 0x49b40821L); /* 16 */
// Round 2
a = GG(a, b, c, d, x[1], S21, 0xf61e2562L); /* 17 */
d = GG(d, a, b, c, x[6], S22, 0xc040b340L); /* 18 */
c = GG(c, d, a, b, x[11], S23, 0x265e5a51L); /* 19 */
b = GG(b, c, d, a, x[0], S24, 0xe9b6c7aaL); /* 20 */
a = GG(a, b, c, d, x[5], S21, 0xd62f105dL); /* 21 */
d = GG(d, a, b, c, x[10], S22, 0x2441453L); /* 22 */
c = GG(c, d, a, b, x[15], S23, 0xd8a1e681L); /* 23 */
b = GG(b, c, d, a, x[4], S24, 0xe7d3fbc8L); /* 24 */
a = GG(a, b, c, d, x[9], S21, 0x21e1cde6L); /* 25 */
d = GG(d, a, b, c, x[14], S22, 0xc33707d6L); /* 26 */
c = GG(c, d, a, b, x[3], S23, 0xf4d50d87L); /* 27 */
b = GG(b, c, d, a, x[8], S24, 0x455a14edL); /* 28 */
a = GG(a, b, c, d, x[13], S21, 0xa9e3e905L); /* 29 */
d = GG(d, a, b, c, x[2], S22, 0xfcefa3f8L); /* 30 */
c = GG(c, d, a, b, x[7], S23, 0x676f02d9L); /* 31 */
b = GG(b, c, d, a, x[12], S24, 0x8d2a4c8aL); /* 32 */
// Round 3
a = HH(a, b, c, d, x[5], S31, 0xfffa3942L); /* 33 */
d = HH(d, a, b, c, x[8], S32, 0x8771f681L); /* 34 */
c = HH(c, d, a, b, x[11], S33, 0x6d9d6122L); /* 35 */
b = HH(b, c, d, a, x[14], S34, 0xfde5380cL); /* 36 */
a = HH(a, b, c, d, x[1], S31, 0xa4beea44L); /* 37 */
d = HH(d, a, b, c, x[4], S32, 0x4bdecfa9L); /* 38 */
c = HH(c, d, a, b, x[7], S33, 0xf6bb4b60L); /* 39 */
b = HH(b, c, d, a, x[10], S34, 0xbebfbc70L); /* 40 */
a = HH(a, b, c, d, x[13], S31, 0x289b7ec6L); /* 41 */
d = HH(d, a, b, c, x[0], S32, 0xeaa127faL); /* 42 */
c = HH(c, d, a, b, x[3], S33, 0xd4ef3085L); /* 43 */
b = HH(b, c, d, a, x[6], S34, 0x4881d05L); /* 44 */
a = HH(a, b, c, d, x[9], S31, 0xd9d4d039L); /* 45 */
d = HH(d, a, b, c, x[12], S32, 0xe6db99e5L); /* 46 */
c = HH(c, d, a, b, x[15], S33, 0x1fa27cf8L); /* 47 */
b = HH(b, c, d, a, x[2], S34, 0xc4ac5665L); /* 48 */
// Round 4
a = II(a, b, c, d, x[0], S41, 0xf4292244L); /* 49 */
d = II(d, a, b, c, x[7], S42, 0x432aff97L); /* 50 */
c = II(c, d, a, b, x[14], S43, 0xab9423a7L); /* 51 */
b = II(b, c, d, a, x[5], S44, 0xfc93a039L); /* 52 */
a = II(a, b, c, d, x[12], S41, 0x655b59c3L); /* 53 */
d = II(d, a, b, c, x[3], S42, 0x8f0ccc92L); /* 54 */
c = II(c, d, a, b, x[10], S43, 0xffeff47dL); /* 55 */
b = II(b, c, d, a, x[1], S44, 0x85845dd1L); /* 56 */
a = II(a, b, c, d, x[8], S41, 0x6fa87e4fL); /* 57 */
d = II(d, a, b, c, x[15], S42, 0xfe2ce6e0L); /* 58 */
c = II(c, d,
没有合适的资源?快使用搜索试试~ 我知道了~
spring3+security3+struts2开源权限项目
共1023个文件
gif:307个
class:114个
java:97个
5星 · 超过95%的资源 需积分: 17 2.4k 下载量 5 浏览量
2013-05-09
01:12:43
上传
评论 55
收藏 23.11MB RAR 举报
温馨提示
完整的RBAC结构(数据库扩展形式),完整安全流程访问(依赖SPRING SECURITY的过滤链),多数据源切换(依赖SPRING),数据缓存功能(依赖EHCACHE)
资源推荐
资源详情
资源评论
收起资源包目录
spring3+security3+struts2开源权限项目 (1023个子文件)
URI.as 74KB
JPGEncoder.as 19KB
DateUtil.as 17KB
MD5Stream.as 17KB
JSONTokenizer.as 15KB
MD5.as 10KB
Dict.as 10KB
JSONEncoder.as 9KB
SHA256.as 9KB
SHA224.as 9KB
SHA1.as 8KB
StringUtil.as 7KB
VCardParser.as 7KB
RFC2817Socket.as 7KB
JSONDecoder.as 7KB
MimeTypeMap.as 6KB
ArrayUtil.as 5KB
PNGEncoder.as 5KB
XMLUtil.as 5KB
URIEncodingBitmap.as 4KB
HMAC.as 4KB
WSSEUsernameToken.as 4KB
URLLoaderBase.as 4KB
IntUtil.as 3KB
JSONToken.as 3KB
FileTarget.as 3KB
IURIResolver.as 3KB
JSONParseError.as 3KB
JSON.as 3KB
DictionaryUtil.as 3KB
ServiceEvent.as 2KB
NumberFormatter.as 2KB
JSONTokenType.as 2KB
IllegalStateError.as 2KB
DynamicURLLoader.as 2KB
VCard.as 2KB
Address.as 2KB
ServiceBase.as 2KB
BitString.as 2KB
Email.as 2KB
Phone.as 2KB
SocketHelper.as 1KB
Definition.as 696B
Response.as 652B
MatchStrategy.as 626B
Database.as 616B
ErrorEvent.as 616B
DefinitionEvent.as 537B
DefinitionHeaderEvent.as 527B
DictionaryServer.as 509B
MatchStrategiesEvent.as 492B
DictionaryServerEvent.as 464B
DatabaseEvent.as 464B
CompleteResponseEvent.as 446B
MatchEvent.as 440B
DisconnectedEvent.as 254B
ConnectedEvent.as 245B
NoMatchEvent.as 239B
upload.asp 16KB
ubb2html.asp 12KB
saveremoteimg.asp 5KB
showubb.asp 2KB
upload.aspx 5KB
saveremoteimg.aspx 4KB
jqFancyTransitions.1.8.min.js.bak 7KB
MD5EncoderCustomer.class 8KB
UserAction.class 8KB
RoleDaoImpl.class 7KB
ServiceQuery.class 7KB
ResourceDaoImpl.class 6KB
SecurityMetadataSourceExtendImpl.class 6KB
UserDaoImpl.class 6KB
CommonUtilImpl.class 5KB
UploadUtilImpl.class 5KB
FreemarkerUtil.class 5KB
ResourceAction.class 5KB
GeneralHelper.class 5KB
RoleAction.class 5KB
UserServiceImpl.class 5KB
RoleServiceImpl.class 5KB
ClassLoaderUtil.class 5KB
User.class 5KB
ContextUtil.class 4KB
ResourceServiceImpl.class 4KB
ValidatorImpl.class 4KB
ImageCaptchaEngineExtend.class 4KB
UsernamePasswordAuthenticationExtendFilter.class 4KB
FileUtilImpl.class 4KB
AESEncoder.class 4KB
TokenInterceptor.class 4KB
AcUtilImpl.class 3KB
LoginSuccessHandler.class 3KB
ImageCaptchaServlet.class 3KB
EhCacheMethodInterceptor.class 3KB
UserDetailsServiceImpl.class 3KB
Regular.class 3KB
PinYinUtilImpl.class 3KB
AbstractBaseDao.class 2KB
AccessDecisionManagerImpl.class 2KB
SecurityInterceptor.class 2KB
共 1023 条
- 1
- 2
- 3
- 4
- 5
- 6
- 11
小丑哥_V5
- 粉丝: 828
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 杨辉三角(Pascal's Triangle)是一个在数学中非常著名的数列,它以一种特定的模式排列数字,内容以5种代码实例实现
- yolov5数据集:CT图像肾脏、结石检测(2类别,包含训练集、验证集)
- 电力102规约请求报文实录
- RTL8723 linux+安卓驱动 2020版本
- ISO 26262 道路车辆-功能安全-系统级产品开发
- 数据挖掘期末题 选择填空简答
- EKF在CTRV模型上的建模推导
- 用于:https://laoshifu.blog.csdn.net/article/details/138191428 多层创建
- 电力102规约(电能累计量的传输规约)培训
- 「常用」E9外部流程接口
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页