public static byte[] GetHash(byte[] input) { if (null == input) { throw new System.ArgumentNullException("input", "Unable to calculate hash over null input data"); } //Intitial values defined in RFC 1321 ABCDStruct abcd = new ABCDStruct(); abcd.A = 0x67452301; abcd.B = 0xefcdab89; abcd.C = 0x98badcfe; abcd.D = 0x10325476; //We pass in the input array by block, the final block of data must be handled specialy for padding & length embeding int startIndex = 0; while (startIndex <= input.Length - 64) { MD5Core.GetHashBlock(input, ref abcd, startIndex); startIndex += 64; } // The final data block. return(MD5Core.GetHashFinalBlock(input, startIndex, input.Length - startIndex, abcd, (Int64)input.Length * 8)); }
internal void calculateChecksum(String publicKey, String privateKey, String uuid, String huid) { String getString = this.urlParamPayload(publicKey, uuid, huid); String getPayload = MD5Core.GetHashString(getString); Utils.log("Hashing " + getString + " --> " + getPayload); String payload = null; if (this.postData != null) { String postPayload = MD5Core.GetHashString(this.postData); Utils.log("Hashing " + this.postData + " --> " + postPayload); payload = MD5Core.GetHashString(getPayload + postPayload); Utils.log("Hashing " + getPayload + postPayload + " --> " + payload); } else { payload = getPayload; } String result = MD5Core.GetHashString(payload + privateKey); Utils.log("Hashing " + payload + privateKey + " --> " + result); this.checksum = result; }