2014-12-27 186 views
0

我需要從這樣一串代碼創建一個哈希:創建一個字符串的哈希值,並在C#中uinteger

private static function core_md5(_arg_1:Array, _arg_2:uint):Array{ 
    var _local_8:uint; 
    var _local_9:uint; 
    var _local_10:uint; 
    var _local_11:uint; 
    _arg_1[(_arg_2 >> 5)] = (_arg_1[(_arg_2 >> 5)] | (128 << (_arg_2 % 32))); 
    _arg_1[((((_arg_2 + 64) >>> 9) << 4) + 14)] = _arg_2; 
    var _local_3:uint = 1732584193; 
    var _local_4:uint = 4023233417; 
    var _local_5:uint = 2562383102; 
    var _local_6:uint = 271733878; 
    var _local_7:uint; 
    while (_local_7 < _arg_1.length) { 
     _arg_1[_local_7] = ((_arg_1[_local_7]) || (0)); 
     _arg_1[(_local_7 + 1)] = ((_arg_1[(_local_7 + 1)]) || (0)); 
     _arg_1[(_local_7 + 2)] = ((_arg_1[(_local_7 + 2)]) || (0)); 
     _arg_1[(_local_7 + 3)] = ((_arg_1[(_local_7 + 3)]) || (0)); 
     _arg_1[(_local_7 + 4)] = ((_arg_1[(_local_7 + 4)]) || (0)); 
     _arg_1[(_local_7 + 5)] = ((_arg_1[(_local_7 + 5)]) || (0)); 
     _arg_1[(_local_7 + 6)] = ((_arg_1[(_local_7 + 6)]) || (0)); 
     _arg_1[(_local_7 + 7)] = ((_arg_1[(_local_7 + 7)]) || (0)); 
     _arg_1[(_local_7 + 8)] = ((_arg_1[(_local_7 + 8)]) || (0)); 
     _arg_1[(_local_7 + 9)] = ((_arg_1[(_local_7 + 9)]) || (0)); 
     _arg_1[(_local_7 + 10)] = ((_arg_1[(_local_7 + 10)]) || (0)); 
     _arg_1[(_local_7 + 11)] = ((_arg_1[(_local_7 + 11)]) || (0)); 
     _arg_1[(_local_7 + 12)] = ((_arg_1[(_local_7 + 12)]) || (0)); 
     _arg_1[(_local_7 + 13)] = ((_arg_1[(_local_7 + 13)]) || (0)); 
     _arg_1[(_local_7 + 14)] = ((_arg_1[(_local_7 + 14)]) || (0)); 
     _arg_1[(_local_7 + 15)] = ((_arg_1[(_local_7 + 15)]) || (0)); 
     _local_8 = _local_3; 
     _local_9 = _local_4; 
     _local_10 = _local_5; 
     _local_11 = _local_6; 
     _local_3 = ff(_local_3, _local_4, _local_5, _local_6, _arg_1[(_local_7 + 0)], 7, 3614090360); 
     _local_6 = ff(_local_6, _local_3, _local_4, _local_5, _arg_1[(_local_7 + 1)], 12, 3905402710); 
     _local_5 = ff(_local_5, _local_6, _local_3, _local_4, _arg_1[(_local_7 + 2)], 17, 606105819); 
     _local_4 = ff(_local_4, _local_5, _local_6, _local_3, _arg_1[(_local_7 + 3)], 22, 3250441966); 
     _local_3 = ff(_local_3, _local_4, _local_5, _local_6, _arg_1[(_local_7 + 4)], 7, 4118548399); 
     _local_6 = ff(_local_6, _local_3, _local_4, _local_5, _arg_1[(_local_7 + 5)], 12, 1200080426); 
     _local_5 = ff(_local_5, _local_6, _local_3, _local_4, _arg_1[(_local_7 + 6)], 17, 2821735955); 
     _local_4 = ff(_local_4, _local_5, _local_6, _local_3, _arg_1[(_local_7 + 7)], 22, 4249261313); 
     _local_3 = ff(_local_3, _local_4, _local_5, _local_6, _arg_1[(_local_7 + 8)], 7, 1770035416); 
     _local_6 = ff(_local_6, _local_3, _local_4, _local_5, _arg_1[(_local_7 + 9)], 12, 2336552879); 
     _local_5 = ff(_local_5, _local_6, _local_3, _local_4, _arg_1[(_local_7 + 10)], 17, 0xFFFF5BB1); 
     _local_4 = ff(_local_4, _local_5, _local_6, _local_3, _arg_1[(_local_7 + 11)], 22, 2304563134); 
     _local_3 = ff(_local_3, _local_4, _local_5, _local_6, _arg_1[(_local_7 + 12)], 7, 1804603682); 
     _local_6 = ff(_local_6, _local_3, _local_4, _local_5, _arg_1[(_local_7 + 13)], 12, 4254626195); 
     _local_5 = ff(_local_5, _local_6, _local_3, _local_4, _arg_1[(_local_7 + 14)], 17, 2792965006); 
     _local_4 = ff(_local_4, _local_5, _local_6, _local_3, _arg_1[(_local_7 + 15)], 22, 1236535329); 
     _local_3 = gg(_local_3, _local_4, _local_5, _local_6, _arg_1[(_local_7 + 1)], 5, 4129170786); 
     _local_6 = gg(_local_6, _local_3, _local_4, _local_5, _arg_1[(_local_7 + 6)], 9, 3225465664); 
     _local_5 = gg(_local_5, _local_6, _local_3, _local_4, _arg_1[(_local_7 + 11)], 14, 643717713); 
     _local_4 = gg(_local_4, _local_5, _local_6, _local_3, _arg_1[(_local_7 + 0)], 20, 3921069994); 
     _local_3 = gg(_local_3, _local_4, _local_5, _local_6, _arg_1[(_local_7 + 5)], 5, 3593408605); 
     _local_6 = gg(_local_6, _local_3, _local_4, _local_5, _arg_1[(_local_7 + 10)], 9, 38016083); 
     _local_5 = gg(_local_5, _local_6, _local_3, _local_4, _arg_1[(_local_7 + 15)], 14, 3634488961); 
     _local_4 = gg(_local_4, _local_5, _local_6, _local_3, _arg_1[(_local_7 + 4)], 20, 3889429448); 
     _local_3 = gg(_local_3, _local_4, _local_5, _local_6, _arg_1[(_local_7 + 9)], 5, 568446438); 
     _local_6 = gg(_local_6, _local_3, _local_4, _local_5, _arg_1[(_local_7 + 14)], 9, 3275163606); 
     _local_5 = gg(_local_5, _local_6, _local_3, _local_4, _arg_1[(_local_7 + 3)], 14, 4107603335); 
     _local_4 = gg(_local_4, _local_5, _local_6, _local_3, _arg_1[(_local_7 + 8)], 20, 1163531501); 
     _local_3 = gg(_local_3, _local_4, _local_5, _local_6, _arg_1[(_local_7 + 13)], 5, 2850285829); 
     _local_6 = gg(_local_6, _local_3, _local_4, _local_5, _arg_1[(_local_7 + 2)], 9, 4243563512); 
     _local_5 = gg(_local_5, _local_6, _local_3, _local_4, _arg_1[(_local_7 + 7)], 14, 1735328473); 
     _local_4 = gg(_local_4, _local_5, _local_6, _local_3, _arg_1[(_local_7 + 12)], 20, 2368359562); 
     _local_3 = hh(_local_3, _local_4, _local_5, _local_6, _arg_1[(_local_7 + 5)], 4, 4294588738); 
     _local_6 = hh(_local_6, _local_3, _local_4, _local_5, _arg_1[(_local_7 + 8)], 11, 2272392833); 
     _local_5 = hh(_local_5, _local_6, _local_3, _local_4, _arg_1[(_local_7 + 11)], 16, 1839030562); 
     _local_4 = hh(_local_4, _local_5, _local_6, _local_3, _arg_1[(_local_7 + 14)], 23, 4259657740); 
     _local_3 = hh(_local_3, _local_4, _local_5, _local_6, _arg_1[(_local_7 + 1)], 4, 2763975236); 
     _local_6 = hh(_local_6, _local_3, _local_4, _local_5, _arg_1[(_local_7 + 4)], 11, 1272893353); 
     _local_5 = hh(_local_5, _local_6, _local_3, _local_4, _arg_1[(_local_7 + 7)], 16, 4139469664); 
     _local_4 = hh(_local_4, _local_5, _local_6, _local_3, _arg_1[(_local_7 + 10)], 23, 3200236656); 
     _local_3 = hh(_local_3, _local_4, _local_5, _local_6, _arg_1[(_local_7 + 13)], 4, 681279174); 
     _local_6 = hh(_local_6, _local_3, _local_4, _local_5, _arg_1[(_local_7 + 0)], 11, 3936430074); 
     _local_5 = hh(_local_5, _local_6, _local_3, _local_4, _arg_1[(_local_7 + 3)], 16, 3572445317); 
     _local_4 = hh(_local_4, _local_5, _local_6, _local_3, _arg_1[(_local_7 + 6)], 23, 76029189); 
     _local_3 = hh(_local_3, _local_4, _local_5, _local_6, _arg_1[(_local_7 + 9)], 4, 3654602809); 
     _local_6 = hh(_local_6, _local_3, _local_4, _local_5, _arg_1[(_local_7 + 12)], 11, 3873151461); 
     _local_5 = hh(_local_5, _local_6, _local_3, _local_4, _arg_1[(_local_7 + 15)], 16, 530742520); 
     _local_4 = hh(_local_4, _local_5, _local_6, _local_3, _arg_1[(_local_7 + 2)], 23, 3299628645); 
     _local_3 = ii(_local_3, _local_4, _local_5, _local_6, _arg_1[(_local_7 + 0)], 6, 4096336452); 
     _local_6 = ii(_local_6, _local_3, _local_4, _local_5, _arg_1[(_local_7 + 7)], 10, 1126891415); 
     _local_5 = ii(_local_5, _local_6, _local_3, _local_4, _arg_1[(_local_7 + 14)], 15, 2878612391); 
     _local_4 = ii(_local_4, _local_5, _local_6, _local_3, _arg_1[(_local_7 + 5)], 21, 4237533241); 
     _local_3 = ii(_local_3, _local_4, _local_5, _local_6, _arg_1[(_local_7 + 12)], 6, 1700485571); 
     _local_6 = ii(_local_6, _local_3, _local_4, _local_5, _arg_1[(_local_7 + 3)], 10, 2399980690); 
     _local_5 = ii(_local_5, _local_6, _local_3, _local_4, _arg_1[(_local_7 + 10)], 15, 4293915773); 
     _local_4 = ii(_local_4, _local_5, _local_6, _local_3, _arg_1[(_local_7 + 1)], 21, 2240044497); 
     _local_3 = ii(_local_3, _local_4, _local_5, _local_6, _arg_1[(_local_7 + 8)], 6, 1873313359); 
     _local_6 = ii(_local_6, _local_3, _local_4, _local_5, _arg_1[(_local_7 + 15)], 10, 4264355552); 
     _local_5 = ii(_local_5, _local_6, _local_3, _local_4, _arg_1[(_local_7 + 6)], 15, 2734768916); 
     _local_4 = ii(_local_4, _local_5, _local_6, _local_3, _arg_1[(_local_7 + 13)], 21, 1309151649); 
     _local_3 = ii(_local_3, _local_4, _local_5, _local_6, _arg_1[(_local_7 + 4)], 6, 4149444226); 
     _local_6 = ii(_local_6, _local_3, _local_4, _local_5, _arg_1[(_local_7 + 11)], 10, 3174756917); 
     _local_5 = ii(_local_5, _local_6, _local_3, _local_4, _arg_1[(_local_7 + 2)], 15, 718787259); 
     _local_4 = ii(_local_4, _local_5, _local_6, _local_3, _arg_1[(_local_7 + 9)], 21, 3951481745); 
     _local_3 = (_local_3 + _local_8); 
     _local_4 = (_local_4 + _local_9); 
     _local_5 = (_local_5 + _local_10); 
     _local_6 = (_local_6 + _local_11); 
     _local_7 = (_local_7 + 16); 
    }; 
    return ([_local_3, _local_4, _local_5, _local_6]); 
} 

private static function rol(_arg_1:uint, _arg_2:uint):uint{ 
    return (((_arg_1 << _arg_2) | (_arg_1 >>> (32 - _arg_2)))); 
} 

private static function cmn(_arg_1:uint, _arg_2:uint, _arg_3:uint, _arg_4:uint, _arg_5:uint, _arg_6:uint):uint{ 
    return ((rol((((_arg_2 + _arg_1) + _arg_4) + _arg_6), _arg_5) + _arg_3)); 
} 

private static function ff(_arg_1:uint, _arg_2:uint, _arg_3:uint, _arg_4:uint, _arg_5:uint, _arg_6:uint, _arg_7:uint):uint{ 
    return (cmn(((_arg_2 & _arg_3) | (~(_arg_2) & _arg_4)), _arg_1, _arg_2, _arg_5, _arg_6, _arg_7)); 
} 

private static function gg(_arg_1:uint, _arg_2:uint, _arg_3:uint, _arg_4:uint, _arg_5:uint, _arg_6:uint, _arg_7:uint):uint{ 
    return (cmn(((_arg_2 & _arg_4) | (_arg_3 & ~(_arg_4))), _arg_1, _arg_2, _arg_5, _arg_6, _arg_7)); 
} 

private static function hh(_arg_1:uint, _arg_2:uint, _arg_3:uint, _arg_4:uint, _arg_5:uint, _arg_6:uint, _arg_7:uint):uint{ 
    return (cmn(((_arg_2^_arg_3)^_arg_4), _arg_1, _arg_2, _arg_5, _arg_6, _arg_7)); 
} 

private static function ii(_arg_1:uint, _arg_2:uint, _arg_3:uint, _arg_4:uint, _arg_5:uint, _arg_6:uint, _arg_7:uint):uint{ 
    return (cmn((_arg_3^(_arg_2 | ~(_arg_4))), _arg_1, _arg_2, _arg_5, _arg_6, _arg_7)); 
} 

但我不覺得誰拿在參數字符串和uinteger功能/ Framework .NET中的整數。

HashAlgorithm.ComputeHash是否與此函數一樣?

http://msdn.microsoft.com/en-us/library/s02tk69a%28v=vs.110%29.aspx

你能幫助我嗎?

Cordialy

+0

你確實需要MD5哈希? .NET有一個非常好的MD5實現。 MD5哈希字節,所以你可以序列化你的數據,但你認爲合適的(例如,把字符串寫成UTF16,並且整數作爲它的4字節表示,按照任意順序),然​​後將結果字節傳遞給MD5算法進行散列。 – 2014-12-27 19:18:30

+0

謝謝,是的,我需要一個MD5哈希,我會嘗試。 – 2014-12-27 19:20:11

回答

0

這裏是你如何完成你的目標一個例子:

static byte[] HashMd5(string text, int value) 
{ 
    using (MemoryStream stream = new MemoryStream()) 
    using (BinaryWriter writer = new BinaryWriter(stream)) 
    using (System.Security.Cryptography.HashAlgorithm hash = 
     new System.Security.Cryptography.MD5Cng()) 
    { 
     writer.Write(text); 
     writer.Write(value); 
     writer.Flush(); 

     stream.Position = 0; 

     return hash.ComputeHash(stream); 
    } 
} 

如果你想要的是一些哈希,上面應該對任何情況下的工作。

但是,有很多選擇;散列通常用於與先前計算的值進行比較,在散列與之前計算的情況相比較時,您需要確保數據的編碼始終完全相同。在上文中,下面需要注意很重要:

  • 的C#string對象正在使用的默認編碼爲UTF8的BinaryWriter
  • 的C#int值在小端格式
  • 編碼爲4個字節

在.NET中,如果你總是使用我已經顯示的確切代碼,它總是會產生相同的散列值。如果您必須在其他某個環境中重新計算散列,那麼其他環境可能會有不同的默認值或編碼規則(例如,將其文本轉換爲UTF8),您必須確保以完全相同的方式完成。對於完全相同的輸入字節,任何MD5算法都會產生完全相同的結果,但您需要確保輸入字節正確(特別是與其他散列相同數據的其他位置相同)。

相關問題