/** 
* 产生摘要 
* @param aValue 
* @param aKey 
* @return 
*/ 
public static String hmacSign(String aValue, String aKey) { 
byte k_ipad[] = new byte[64]; 
byte k_opad[] = new byte[64]; 
byte keyb[]; 
byte value[]; 
try { 
keyb = aKey.getBytes(encodingCharset); 
value = aValue.getBytes(encodingCharset); 
} catch (UnsupportedEncodingException e) { 
keyb = aKey.getBytes(); 
value = aValue.getBytes(); 
} Arrays.fill(k_ipad, keyb.length, 64, (byte) 54); 
Arrays.fill(k_opad, keyb.length, 64, (byte) 92); 
for (int i = 0; i < keyb.length; i++) { 
k_ipad[i] = (byte) (keyb[i] ^ 0x36); 
k_opad[i] = (byte) (keyb[i] ^ 0x5c); 
} MessageDigest md = null; 
try { 
md = MessageDigest.getInstance("MD5"); 
} catch (NoSuchAlgorithmException e) { return null; 

md.update(k_ipad); 
md.update(value); 
byte dg[] = md.digest(); 
md.reset(); 
md.update(k_opad); 
md.update(dg, 0, 16); 
dg = md.digest(); 
return toHex(dg); 
} public static String toHex(byte input[]) { 
if (input == null) 
return null; 
StringBuffer output = new StringBuffer(input.length * 2); 
for (int i = 0; i < input.length; i++) { 
int current = input[i] & 0xff; 
if (current < 16) 
output.append("0"); 
output.append(Integer.toString(current, 16)); 
} return output.toString(); 

--------
贴了片段:encodingCharset=“UTF-8”,这好像是JAVA的MD5加密的算法..但里面有一些看不明白。谢谢..急..

解决方案 »

  1.   

    你就找一段相关的C# MD5的来看不就行啦
      

  2.   

    不是。Arrays.fill(k_ipad, keyb.length, 64, (byte) 54); 
    Arrays.fill(k_opad, keyb.length, 64, (byte) 92); 
    for (int i = 0; i < keyb.length; i++) { 
    k_ipad[i] = (byte) (keyb[i] ^ 0x36); 
    k_opad[i] = (byte) (keyb[i] ^ 0x5c); 

    Arrays.fill(k_ipad, keyb.length, 64, (byte) 54); 
    Arrays.fill(k_opad, keyb.length, 64, (byte) 92); 
    for (int i = 0; i < keyb.length; i++) { 
    k_ipad[i] = (byte) (keyb[i] ^ 0x36); 
    k_opad[i] = (byte) (keyb[i] ^ 0x5c); 

    这个我都不知如何拿C#来写..我是初学的。
      

  3.   

    前面部分我改为了
          byte[] k_ipad = new byte[64];
    byte[] k_opad = new byte[64];
            byte[] keyb;
            byte[] value;
    try 
            {
                keyb = Encoding.GetEncoding("UTF-8").GetBytes(aValue);
                value = Encoding.GetEncoding("UTF-8").GetBytes(aKey);
    }
            catch 
            {
                keyb = Encoding.Default.GetBytes(aValue);
                value = Encoding.Default.GetBytes(aKey);
    }
            for (int i = keyb.Length; i < 64; i++)
            {
                k_ipad[i] = (byte)54;
                k_opad[i] = (byte)92;
            }
            for (int i = 0; i < keyb.Length; i++)
            {
                k_ipad[i] = (byte)(keyb[i] ^ 0x36);
                k_opad[i] = (byte)(keyb[i] ^ 0x5c);        }
    不知道对不对,但后面部分真不知道什么意思..主要是不知道JAVA版的什么意思
      

  4.   

    把你的帖子发到.NET板块去吧。