j2me寻路算法:密码知识系列的基于J2ME的MD5算法类

来源:安全中国 实现MD5算法提供个静态toMD5;还提供个getMD5ofStr生成个MD5加密串
public MD5 { final S11 = 7; final S12 = 12; final S13 = 17; final S14 = 22; final S21 = 5; final S22 = 9; final S23 = 14; final S24 = 20; final S31 = 4; final S32 = 11; final S33 = 16; final S34 = 23; final S41 = 6; final S42 = 10; final S43 = 15; final S44 = 21; final char Hex= {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; final 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; private long count; private buffer; public String digestHexStr; private digest; private test; public String getMD5ofStr(String s) {//返回MD5串; i; md5Init; md5Update(s.getBytes, s.length); md5Final; digestHexStr = ""; for(i = 0;i<16;i) digestHexStr=digestHexStr+HEX(digest[i]); digestHexStr; } public MD5 { state = long[4]; count = long[2]; buffer = [64]; digest = [16]; md5Init; } private void md5Init {//化部分变量; count[0] = 0L; count[1] = 0L; state[0] = 0x67452301L; state[1] = 0xefcdab89L; state[2] = 0x98badcfeL; state[3] = 0x10325476L; } private long F(long l, long l1, long l2) { l & l1 | ~l & l2; } private long G(long l, long l1, long l2) { l & l2 | l1 & ~l2; } private long H(long l, long l1, long l2) { l ^ l1 ^ l2; } private long I(long l, long l1, long l2) { l1 ^ (l | ~l2); } private long FF(long l, long l1, long l2, long l3, long l4, long l5, long l6) { l F(l1, l2, l3) + l4 + l6; l = ()l << ()l5 | ()l >>> ()(32L - l5); l l1; l; } private long GG(long l, long l1, long l2, long l3, long l4, long l5, long l6) { l G(l1, l2, l3) + l4 + l6; l = ()l << ()l5 | ()l >>> ()(32L - l5); l l1; l; } private long HH(long l, long l1, long l2, long l3, long l4, long l5, long l6) { l H(l1, l2, l3) + l4 + l6; l = ()l << ()l5 | ()l >>> ()(32L - l5); l l1; l; } private long II(long l, long l1, long l2, long l3, long l4, long l5, long l6) { l I(l1, l2, l3) + l4 + l6; l = ()l << ()l5 | ()l >>> ()(32L - l5); l l1; l; } private void md5Update( a0, i) {//补位操作a0为需要进行MD5加密i为串长度; a1 = [64]; k = ()(count[0] >>> 3) & 0x3f; ((count[0] i << 3) < (long)(i << 3)) count[1]; count[1] i >>> 29; l = 64 - k; j; (i >= l) { md5Memcpy(buffer, a0, k, 0, l); md5Transform(buffer); for(j = l; j + 63 < i; j 64) { md5Memcpy(a1, a0, 0, j, 64); md5Transform(a1); } k = 0; } { j = 0; } md5Memcpy(buffer, a0, k, j, i - j); } private void md5Final {//最终处理将得到128位(16字节)MD5码存放在digest a0 = [8]; Encode(a0, count, 8); i = ()(count[0] >>> 3) & 0x3f; j = i >= 56 ? 120 - i : 56 - i; md5Update(PADDING, j); md5Update(a0, 8); Encode(digest, state, 16); } private void md5Memcpy( a0, a1, i, j, k) { for( l = 0; l < k; l) a0[i + l] = a1[j + l]; } private void md5Transform( a0) { long l = state[0]; long l1 = state[1]; long l2 = state[2]; long l3 = state[3]; long al = long[16]; Decode(al, a0, 64); l = FF(l, l1, l2, l3, al[0], 7L, 0xd76aa478L); l3 = FF(l3, l, l1, l2, al[1], 12L, 0xe8c7b756L); l2 = FF(l2, l3, l, l1, al[2], 17L, 0x242070dbL); l1 = FF(l1, l2, l3, l, al[3], 22L, 0xc1bdceeeL); l = FF(l, l1, l2, l3, al[4], 7L, 0xf57c0fafL); l3 = FF(l3, l, l1, l2, al[5], 12L, 0x4787c62aL); l2 = FF(l2, l3, l, l1, al[6], 17L, 0xa8304613L); l1 = FF(l1, l2, l3, l, al[7], 22L, 0xfd469501L); l = FF(l, l1, l2, l3, al[8], 7L, 0x698098d8L); l3 = FF(l3, l, l1, l2, al[9], 12L, 0x8b44f7afL); l2 = FF(l2, l3, l, l1, al[10], 17L, 0xffff5bb1L); l1 = FF(l1, l2, l3, l, al[11], 22L, 0x895cd7beL); l = FF(l, l1, l2, l3, al[12], 7L, 0x6b901122L); l3 = FF(l3, l, l1, l2, al[13], 12L, 0xfd987193L); l2 = FF(l2, l3, l, l1, al[14], 17L, 0xa679438eL); l1 = FF(l1, l2, l3, l, al[15], 22L, 0x49b40821L); l = GG(l, l1, l2, l3, al[1], 5L, 0xf61e2562L); l3 = GG(l3, l, l1, l2, al[6], 9L, 0xc040b340L); l2 = GG(l2, l3, l, l1, al[11], 14L, 0x265e5a51L); l1 = GG(l1, l2, l3, l, al[0], 20L, 0xe9b6c7aaL); l = GG(l, l1, l2, l3, al[5], 5L, 0xd62f105dL); l3 = GG(l3, l, l1, l2, al[10], 9L, 0x2441453L); l2 = GG(l2, l3, l, l1, al[15], 14L, 0xd8a1e681L); l1 = GG(l1, l2, l3, l, al[4], 20L, 0xe7d3fbc8L); l = GG(l, l1, l2, l3, al[9], 5L, 0x21e1cde6L); l3 = GG(l3, l, l1, l2, al[14], 9L, 0xc33707d6L); l2 = GG(l2, l3, l, l1, al[3], 14L, 0xf4d50d87L); l1 = GG(l1, l2, l3, l, al[8], 20L, 0x455a14edL); l = GG(l, l1, l2, l3, al[13], 5L, 0xa9e3e905L); l3 = GG(l3, l, l1, l2, al[2], 9L, 0xfcefa3f8L); l2 = GG(l2, l3, l, l1, al[7], 14L, 0x676f02d9L); l1 = GG(l1, l2, l3, l, al[12], 20L, 0x8d2a4c8aL); l = HH(l, l1, l2, l3, al[5], 4L, 0xfffa3942L); l3 = HH(l3, l, l1, l2, al[8], 11L, 0x8771f681L); l2 = HH(l2, l3, l, l1, al[11], 16L, 0x6d9d6122L); l1 = HH(l1, l2, l3, l, al[14], 23L, 0xfde5380cL); l = HH(l, l1, l2, l3, al[1], 4L, 0xa4beea44L); l3 = HH(l3, l, l1, l2, al[4], 11L, 0x4bdecfa9L); l2 = HH(l2, l3, l, l1, al[7], 16L, 0xf6bb4b60L); l1 = HH(l1, l2, l3, l, al[10], 23L, 0xbebfbc70L); l = HH(l, l1, l2, l3, al[13], 4L, 0x289b7ec6L); l3 = HH(l3, l, l1, l2, al[0], 11L, 0xeaa127faL); l2 = HH(l2, l3, l, l1, al[3], 16L, 0xd4ef3085L); l1 = HH(l1, l2, l3, l, al[6], 23L, 0x4881d05L); l = HH(l, l1, l2, l3, al[9], 4L, 0xd9d4d039L); l3 = HH(l3, l, l1, l2, al[12], 11L, 0xe6db99e5L); l2 = HH(l2, l3, l, l1, al[15], 16L, 0x1fa27cf8L); l1 = HH(l1, l2, l3, l, al[2], 23L, 0xc4ac5665L); l = II(l, l1, l2, l3, al[0], 6L, 0xf4292244L); l3 = II(l3, l, l1, l2, al[7], 10L, 0x432aff97L); l2 = II(l2, l3, l, l1, al[14], 15L, 0xab9423a7L); l1 = II(l1, l2, l3, l, al[5], 21L, 0xfc93a039L); l = II(l, l1, l2, l3, al[12], 6L, 0x655b59c3L); l3 = II(l3, l, l1, l2, al[3], 10L, 0x8f0ccc92L); l2 = II(l2, l3, l, l1, al[10], 15L, 0xffeff47dL); l1 = II(l1, l2, l3, l, al[1], 21L, 0x85845dd1L); l = II(l, l1, l2, l3, al[8], 6L, 0x6fa87e4fL); l3 = II(l3, l, l1, l2, al[15], 10L, 0xfe2ce6e0L); l2 = II(l2, l3, l, l1, al[6], 15L, 0xa3014314L); l1 = II(l1, l2, l3, l, al[13], 21L, 0x4e0811a1L); l = II(l, l1, l2, l3, al[4], 6L, 0xf7537e82L); l3 = II(l3, l, l1, l2, al[11], 10L, 0xbd3af235L); l2 = II(l2, l3, l, l1, al[2], 15L, 0x2ad7d2bbL); l1 = II(l1, l2, l3, l, al[9], 21L, 0xeb86d391L); state[0] l; state[1] l1; state[2] l2; state[3] l3; } private void Encode( a0, long al, i) {//转换将al中long型变量输出到a0中 //低位字节在前高位字节在后; j = 0; for( k = 0; k < i; k 4) { a0[k] = ()()(al[j] & 255L); a0[k + 1] = ()()(al[j] >>> 8 & 255L); a0[k + 2] = ()()(al[j] >>> 16 & 255L); a0[k + 3] = ()()(al[j] >>> 24 & 255L); j; } } private void Decode(long al, a0, i) { j = 0; for( k = 0; k < i; k 4) { al[j] = b2iu(a0[k]) | b2iu(a0[k + 1]) << 8 | b2iu(a0[k + 2]) << 16 | b2iu(a0[k + 3]) << 24; j; } } public long b2iu( 0) { 0 >= 0 ? 0 : 0 & 0xff; } public String HEX( 0) {//字节到十 6进制ASCII码转换 char ac = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; char ac1 = char[2]; ac1[0] = ac[0 >>> 4 & 0xf]; ac1[1] = ac[0 & 0xf]; String s = String(ac1); s; } public String toMD5(String s) { MD5 md5 = MD5; md5.getMD5ofStr(s); } }




  • 篇文章: FamilyTree 8.0 注册算法分析[简单]

  • 篇文章: 用PGP加密:PGP密匙生成以及PGP命令
  • Tags:  md5加密算法 md5算法 j2me卷轴算法 j2me寻路算法

    延伸阅读

    最新评论

    发表评论