<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: md5 code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Sat, 17 May 2008 04:35:56 GMT</pubDate>
    <description>DZone Snippets: md5 code</description>
    <item>
      <title>Convert a long to HEX value and the other way around</title>
      <link>http://snippets.dzone.com/posts/show/4593</link>
      <description>Handy to convert MD5 or SHA-1 hash values.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;	public static long hexToLong(byte[] bytes) {&lt;br /&gt;&lt;br /&gt;		if (bytes.length &gt; 16) {&lt;br /&gt;			throw new IllegalArgumentException("Byte array too long (max 16 elements)");&lt;br /&gt;		}&lt;br /&gt;		long v = 0;&lt;br /&gt;		for (int i = 0; i &lt; bytes.length; i += 2) {&lt;br /&gt;			byte b1 = (byte) (bytes[i] &amp; 0xFF);&lt;br /&gt;&lt;br /&gt;			b1 -= 48;&lt;br /&gt;			if (b1 &gt; 9) b1 -= 39;&lt;br /&gt;&lt;br /&gt;			if (b1 &lt; 0 || b1 &gt; 15) {&lt;br /&gt;				throw new IllegalArgumentException("Illegal hex value: " + bytes[i]);&lt;br /&gt;			}&lt;br /&gt;&lt;br /&gt;			b1 &lt;&lt;=4;&lt;br /&gt;&lt;br /&gt;			byte b2 = (byte) (bytes[i + 1] &amp; 0xFF);&lt;br /&gt;			b2 -= 48;&lt;br /&gt;			if (b2 &gt; 9) b2 -= 39;&lt;br /&gt;&lt;br /&gt;			if (b2 &lt; 0 || b2 &gt; 15) {&lt;br /&gt;				throw new IllegalArgumentException("Illegal hex value: " + bytes[i + 1]);&lt;br /&gt;			}&lt;br /&gt;&lt;br /&gt;			v |= (((b1 &amp; 0xF0) | (b2 &amp; 0x0F))) &amp; 0x00000000000000FFL ;&lt;br /&gt;&lt;br /&gt;			if (i + 2 &lt; bytes.length) v &lt;&lt;= 8;&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		return v;&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	public static byte[] longToHex(final long l) {&lt;br /&gt;		long v = l &amp; 0xFFFFFFFFFFFFFFFFL;&lt;br /&gt;&lt;br /&gt;		byte[] result = new byte[16];&lt;br /&gt;		Arrays.fill(result, 0, result.length, (byte)0);&lt;br /&gt;&lt;br /&gt;		for (int i = 0; i &lt; result.length; i += 2) {&lt;br /&gt;			byte b = (byte) ((v &amp; 0xFF00000000000000L) &gt;&gt; 56);&lt;br /&gt;&lt;br /&gt;			byte b2 = (byte) (b &amp; 0x0F);&lt;br /&gt;			byte b1 = (byte) ((b &gt;&gt; 4) &amp; 0x0F);&lt;br /&gt;&lt;br /&gt;			if (b1 &gt; 9) b1 += 39;&lt;br /&gt;			b1 += 48;&lt;br /&gt;&lt;br /&gt;			if (b2 &gt; 9) b2 += 39;&lt;br /&gt;			b2 += 48;&lt;br /&gt;&lt;br /&gt;			result[i] = (byte) (b1 &amp; 0xFF);&lt;br /&gt;			result[i + 1] = (byte) (b2 &amp; 0xFF);&lt;br /&gt;&lt;br /&gt;			v &lt;&lt;= 8;&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		return result;&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;And tests:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;	public void testHexToLong() throws Exception {&lt;br /&gt;		assertEquals(-7057002501900618110L, NumberUtils.hexToLong("9e107d9d372bb682".getBytes()));&lt;br /&gt;		assertEquals(-10908158098650842L, NumberUtils.hexToLong("ffd93f1687604926".getBytes()));&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	public void testLongToHex() throws Exception {&lt;br /&gt;		assertEquals("9e107d9d372bb682", new String(NumberUtils.longToHex(-7057002501900618110L)));&lt;br /&gt;		assertEquals("ffd93f1687604926", new String(NumberUtils.longToHex(-10908158098650842L)));&lt;br /&gt;	}&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sun, 30 Sep 2007 23:30:01 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4593</guid>
      <author>devijvers (Steven Devijver)</author>
    </item>
    <item>
      <title>Calculate MD5 hash</title>
      <link>http://snippets.dzone.com/posts/show/4108</link>
      <description>// description of your code here&lt;br /&gt;http://blogs.msdn.com/csharpfaq/archive/2006/10/09/How-do-I-calculate-a-MD5-hash-from-a-string_3F00_.aspx&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;public string CalculateMD5Hash(string input)&lt;br /&gt;{&lt;br /&gt;    // step 1, calculate MD5 hash from input&lt;br /&gt;    MD5 md5 = System.Security.Cryptography.MD5.Create();&lt;br /&gt;    byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input);&lt;br /&gt;    byte[] hash = md5.ComputeHash(inputBytes);&lt;br /&gt; &lt;br /&gt;    // step 2, convert byte array to hex string&lt;br /&gt;    StringBuilder sb = new StringBuilder();&lt;br /&gt;    for (int i = 0; i &lt; hash.Length; i++)&lt;br /&gt;    {&lt;br /&gt;        sb.Append(hash[i].ToString("X2"));&lt;br /&gt;    }&lt;br /&gt;    return sb.ToString();&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Wed, 06 Jun 2007 21:14:46 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4108</guid>
      <author>Edgardo (Edgardo Rossetto)</author>
    </item>
    <item>
      <title>How to identify files which are identical  in a directory</title>
      <link>http://snippets.dzone.com/posts/show/3858</link>
      <description>I use this script to find identical files with different names on a folder. It is very usefull to when you want to check your media collection for duplicates items. Basically it scans the directory and its subfolders, computes the md5 sum for each file, and keep them in a hash so they can be compared. The buffer size can be bigger or smaller, regarding the amount of memory you want to use. For large directories it can take a while to run, but it worked fine, at least for my 20+GB pictures collection.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#!/usr/local/bin/ruby&lt;br /&gt;require 'digest/md5'&lt;br /&gt;require 'digest/sha1'&lt;br /&gt;&lt;br /&gt;$BUF_SIZE = 1024*1024*1024&lt;br /&gt;&lt;br /&gt;class Folder_Md5&lt;br /&gt;	&lt;br /&gt;	def initialize(folder)&lt;br /&gt;		@md5_to_files = Hash.new	&lt;br /&gt;		@folder = folder&lt;br /&gt;	end	&lt;br /&gt;		&lt;br /&gt;	def scan&lt;br /&gt;		@md5_to_files.clear&lt;br /&gt;		compute_md5(@folder)&lt;br /&gt;	end		&lt;br /&gt;	&lt;br /&gt;	def md5_for_file(file_path)&lt;br /&gt;		@md5_to_files[file_path]&lt;br /&gt;	end	&lt;br /&gt;	&lt;br /&gt;	def identical_count&lt;br /&gt;		total = 0&lt;br /&gt;		@md5_to_files.each_value do |value|&lt;br /&gt;				if value.size &gt;= 2&lt;br /&gt;					total+= value.size		&lt;br /&gt;				end &lt;br /&gt;			end&lt;br /&gt;		return total	&lt;br /&gt;	end	&lt;br /&gt;	&lt;br /&gt;	def list_identical&lt;br /&gt;		total = 0&lt;br /&gt;		identities = 0&lt;br /&gt;		puts 'The List of identical files'&lt;br /&gt;		@md5_to_files.each_value do |value|&lt;br /&gt;				if value.size &gt;= 2&lt;br /&gt;					identities+=1&lt;br /&gt;					total+= value.size&lt;br /&gt;					puts 'Idenitical files:'&lt;br /&gt;					value.each{|file_name| puts file_name}&lt;br /&gt;				end &lt;br /&gt;			end&lt;br /&gt;		puts "got #{identities} identities impling #{total} files"&lt;br /&gt;	end&lt;br /&gt;	&lt;br /&gt;	private	&lt;br /&gt;		def compute_md5(file_path)&lt;br /&gt;			if File.directory?(file_path)&lt;br /&gt;				crt_dir = Dir.new(file_path)&lt;br /&gt;				crt_dir.each do |file_name|&lt;br /&gt;					if file_name != '.' &amp;&amp;  file_name != '..'				&lt;br /&gt;						compute_md5("#{crt_dir.path}#{file_name}")		&lt;br /&gt;					end&lt;br /&gt;				end	&lt;br /&gt;			else&lt;br /&gt;				md5_val = md5(file_path)&lt;br /&gt;				if @md5_to_files[md5_val] == nil&lt;br /&gt;					@md5_to_files[md5_val]  = [file_path]	&lt;br /&gt;				else					&lt;br /&gt;					 @md5_to_files[md5_val] &lt;&lt; file_path&lt;br /&gt;				end		&lt;br /&gt;			end&lt;br /&gt;		end&lt;br /&gt;		&lt;br /&gt;		def md5(file_path)&lt;br /&gt;			hasher = Digest::MD5.new&lt;br /&gt;			open(file_path, "r") do |io|&lt;br /&gt;				counter = 0&lt;br /&gt;				while (!io.eof)&lt;br /&gt;					readBuf = io.readpartial($BUF_SIZE)&lt;br /&gt;					putc '.' if ((counter+=1) % 3 == 0)&lt;br /&gt;					hasher.update(readBuf)&lt;br /&gt;				end&lt;br /&gt;			end			&lt;br /&gt;			return hasher.hexdigest&lt;br /&gt;		end	&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;worker = Folder_Md5.new(ARGV[0])&lt;br /&gt;worker.scan&lt;br /&gt;worker.list_identical&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Mon, 23 Apr 2007 16:00:08 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3858</guid>
      <author>motoras (Romulus Pasca)</author>
    </item>
    <item>
      <title>Get MD5 hash in a few lines of Java</title>
      <link>http://snippets.dzone.com/posts/show/3686</link>
      <description>// MD5 in Java, short and sweet version.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;    1 import java.security.*;&lt;br /&gt;    2 import java.math.*;&lt;br /&gt;    3 &lt;br /&gt;    4 public class MD5 {&lt;br /&gt;    5    public static void main(String args[]) throws Exception{&lt;br /&gt;    6       String s="This is a test";&lt;br /&gt;    7       MessageDigest m=MessageDigest.getInstance("MD5");&lt;br /&gt;    8       m.update(s.getBytes(),0,s.length());&lt;br /&gt;    9       System.out.println("MD5: "+new BigInteger(1,m.digest()).toString(16));&lt;br /&gt;   10    }&lt;br /&gt;   11 }&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sun, 18 Mar 2007 05:49:03 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3686</guid>
      <author>gmiller (Greg Miller)</author>
    </item>
    <item>
      <title>Java - String2MD5</title>
      <link>http://snippets.dzone.com/posts/show/3594</link>
      <description>&lt;code&gt;&lt;br /&gt;public static byte[] getKeyedDigest(byte[] buffer, byte[] key) {&lt;br /&gt;   try {&lt;br /&gt;      MessageDigest md5 = MessageDigest.getInstance("MD5");&lt;br /&gt;      md5.update(buffer);&lt;br /&gt;      return md5.digest(key);&lt;br /&gt;   } catch (NoSuchAlgorithmException nsae) {}&lt;br /&gt;&lt;br /&gt;   return null;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Wed, 28 Feb 2007 07:29:42 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3594</guid>
      <author>whitetiger ()</author>
    </item>
    <item>
      <title>MD5 and SHA1 in Ruby</title>
      <link>http://snippets.dzone.com/posts/show/3349</link>
      <description>// A Simple MD5/SHA1 calculator in Ruby&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#!/usr/bin/ruby1.8 -w&lt;br /&gt;&lt;br /&gt;#&lt;br /&gt;# A Simple Hash Code Calculator&lt;br /&gt;# Returns SHA1 and MD5 hash for any given file&lt;br /&gt;# Author: Alessio Saltarin&lt;br /&gt;#&lt;br /&gt;&lt;br /&gt;require 'digest/md5'&lt;br /&gt;require 'digest/sha1'&lt;br /&gt;&lt;br /&gt;$BUFLEN = 1024&lt;br /&gt;&lt;br /&gt;class Hasher&lt;br /&gt;	# Constructor&lt;br /&gt;	# method = "SHA1" or "MD5"&lt;br /&gt;	# filepath = Full filepath&lt;br /&gt;	def initialize(method, filepath)&lt;br /&gt;		if (method.upcase == "-SHA1")&lt;br /&gt;			@hashfunc = Digest::SHA1.new&lt;br /&gt;			@hashname = "SHA1"&lt;br /&gt;		else&lt;br /&gt;			@hashfunc = Digest::MD5.new&lt;br /&gt;			@hashname = "MD5"&lt;br /&gt;		end&lt;br /&gt;		@fullfilename = filepath&lt;br /&gt;	end&lt;br /&gt;&lt;br /&gt;	def hashname&lt;br /&gt;		@hashname&lt;br /&gt;	end&lt;br /&gt;&lt;br /&gt;	# Compute hash code&lt;br /&gt;	def hashsum&lt;br /&gt;		open(@fullfilename, "r") do |io|&lt;br /&gt;			puts "Reading "+@fullfilename&lt;br /&gt;			counter = 0&lt;br /&gt;			while (!io.eof)&lt;br /&gt;				readBuf = io.readpartial($BUFLEN)&lt;br /&gt;				putc '.' if ((counter+=1) % 3 == 0)&lt;br /&gt;				@hashfunc.update(readBuf)&lt;br /&gt;			end&lt;br /&gt;		end&lt;br /&gt;		return @hashfunc.hexdigest&lt;br /&gt;	end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def usage&lt;br /&gt;	puts "Usage: Hasher.rb [-SHA1|-MD5] filename"&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def printresult(filename, method, sum)&lt;br /&gt;	puts "\n" + filename + " ==&gt; "+ method + ": " + sum	&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;#Program starts&lt;br /&gt;if (ARGV.length == 2)&lt;br /&gt;	hashcomp = Hasher.new(ARGV[0], ARGV[1])&lt;br /&gt;	printresult(ARGV[1], hashcomp.hashname, hashcomp.hashsum)&lt;br /&gt;	&lt;br /&gt;elsif (ARGV.length == 1)&lt;br /&gt;	hashcomp = Hasher.new("-MD5", ARGV[0])&lt;br /&gt;	printresult(ARGV[0], hashcomp.hashname, hashcomp.hashsum)&lt;br /&gt;else&lt;br /&gt;	usage&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Tue, 23 Jan 2007 20:53:03 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3349</guid>
      <author>axsaxs (Alessio Saltarin)</author>
    </item>
    <item>
      <title>md5 digest hash in newLISP</title>
      <link>http://snippets.dzone.com/posts/show/2591</link>
      <description>;;; md5 in newLISP&lt;br /&gt;&lt;br /&gt;;;&lt;br /&gt;;; based on RFC 1321&lt;br /&gt;;;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(define (F x y z)&lt;br /&gt;  (| (&amp; x y) (&amp; (&amp; 0xffffffff (~ x)) z)))&lt;br /&gt;&lt;br /&gt;(define (G x y z)&lt;br /&gt;  (| (&amp; x z) (&amp; y (&amp; 0xffffffff (~ z)))))&lt;br /&gt;&lt;br /&gt;(define (H x y z)&lt;br /&gt;  (^ x y z))&lt;br /&gt;&lt;br /&gt;(define (I x y z)&lt;br /&gt;  (^ y (| x (&amp; 0xffffffff (~ z)))))&lt;br /&gt;&lt;br /&gt;(define (rotate-left x n)&lt;br /&gt;  (| (&amp; 0xffffffff (&lt;&lt; x n)) (&amp; 0xffffffff (&gt;&gt; x (- 32 n)))))&lt;br /&gt;&lt;br /&gt;(define (FF a b c d x s ac)&lt;br /&gt;  (set 'a (&amp; 0xffffffff (+ a (F b c d) x ac)))&lt;br /&gt;  (set 'a (rotate-left a s))&lt;br /&gt;  (set 'a (&amp; 0xffffffff (+ a b))))&lt;br /&gt;&lt;br /&gt;(define (GG a b c d x s ac)&lt;br /&gt;  (set 'a (&amp; 0xffffffff (+ a (G b c d) x ac)))&lt;br /&gt;  (set 'a (rotate-left a s))&lt;br /&gt;  (set 'a (&amp; 0xffffffff (+ a b))))&lt;br /&gt;&lt;br /&gt;(define (HH a b c d x s ac)&lt;br /&gt;  (set 'a (&amp; 0xffffffff (+ a (H b c d) x ac)))&lt;br /&gt;  (set 'a (rotate-left a s))&lt;br /&gt;  (set 'a (&amp; 0xffffffff (+ a b))))&lt;br /&gt;&lt;br /&gt;(define (II a b c d x s ac)&lt;br /&gt;  (set 'a (&amp; 0xffffffff (+ a (I b c d) x ac)))&lt;br /&gt;  (set 'a (rotate-left a s))&lt;br /&gt;  (set 'a (&amp; 0xffffffff (+ a b))))&lt;br /&gt;&lt;br /&gt;(define (md5-init )&lt;br /&gt;  (set 'md5-i '(0 0))&lt;br /&gt;  (set 'md5-in (dup 0 64))&lt;br /&gt;  (set 'md5-digest (dup 0 16))&lt;br /&gt;  (set 'md5-buf '(0x67452301 0xefcdab89 0x98badcfe 0x10325476)))&lt;br /&gt;&lt;br /&gt;(define (md5-update inbuf inlen)&lt;br /&gt;  ;; compute number of bytes mod 64&lt;br /&gt;  (set 'mdi (&amp; (&gt;&gt; (md5-i 0) 3) 0x3f))&lt;br /&gt;&lt;br /&gt;  ;; update number of bits&lt;br /&gt;  (if (&lt; (+ (md5-i 0)  (&lt;&lt; inlen 3)) (md5-i 0))&lt;br /&gt;      (nth-set (md5-i 1) (+ 1 (md5-i 1))))&lt;br /&gt;&lt;br /&gt;  (nth-set (md5-i 0) (+ (md5-i 0) (&lt;&lt; inlen 3)))&lt;br /&gt;  (nth-set (md5-i 1) (+ (md5-i 1) (&gt;&gt; inlen 29)))&lt;br /&gt;&lt;br /&gt;  (set 'inbuf-index 0)&lt;br /&gt;  (while (&gt; inlen 0)&lt;br /&gt;	 ;; add new character to buffer, increment mdi&lt;br /&gt;	 (nth-set (md5-in mdi) (inbuf inbuf-index))&lt;br /&gt;	 (set 'mdi (+ mdi 1))&lt;br /&gt;	 (set 'inbuf-index (+ inbuf-index 1))&lt;br /&gt;&lt;br /&gt;	 ;; transform if necessary&lt;br /&gt;	 (if (= mdi 0x40)&lt;br /&gt;	     (begin&lt;br /&gt;	       (set 'ii 0)&lt;br /&gt;	       (set 'in (dup 0 16))&lt;br /&gt;	       (for (i 0 15 1)&lt;br /&gt;		    (nth-set (in i) (| (&lt;&lt; (char-&gt;int (md5-in (+ ii 3))) 24)&lt;br /&gt;				       (&lt;&lt; (char-&gt;int (md5-in (+ ii 2))) 16)&lt;br /&gt;				       (&lt;&lt; (char-&gt;int (md5-in (+ ii 1))) 8)&lt;br /&gt;				       (char-&gt;int (md5-in ii))))&lt;br /&gt;		    (set 'ii (+ ii 4)))&lt;br /&gt;	       (transform  in)&lt;br /&gt;	       (set 'mdi 0)))&lt;br /&gt;	 (set 'inlen (- inlen 1))))&lt;br /&gt;&lt;br /&gt;(define (char-&gt;int x)&lt;br /&gt;  (if (integer? x) x (char x)))&lt;br /&gt;&lt;br /&gt;(define (md5-final)&lt;br /&gt;  (set 'in (dup 0 16))&lt;br /&gt;&lt;br /&gt;  ;; save number of bits&lt;br /&gt;  (nth-set (in 14) (md5-i 0))&lt;br /&gt;  (nth-set (in 15) (md5-i 1))&lt;br /&gt;&lt;br /&gt;  ;; compute number of bytse mod 64&lt;br /&gt;  (set 'mdi (&amp; (&gt;&gt; (md5-i 0) 3) 0x3f))&lt;br /&gt;&lt;br /&gt;  ;; pad out to 56 mod 64&lt;br /&gt;  (if (&lt; mdi 56)&lt;br /&gt;      (set 'padlen (- 56 mdi))&lt;br /&gt;      (set 'padlen (- 120 mdi)))&lt;br /&gt;&lt;br /&gt;  (set 'padding (dup 0 64))&lt;br /&gt;  (nth-set (padding 0) 0x80)&lt;br /&gt;  (md5-update padding padlen)&lt;br /&gt;&lt;br /&gt;  ;; append lenth in bits and transform&lt;br /&gt;  (set 'ii 0)&lt;br /&gt;  (for (i 0 13 1)&lt;br /&gt;       (nth-set (in i) (| (&lt;&lt; (char-&gt;int (md5-in (+ ii 3))) 24)&lt;br /&gt;			  (&lt;&lt; (char-&gt;int (md5-in (+ ii 2))) 16)&lt;br /&gt;			  (&lt;&lt; (char-&gt;int (md5-in (+ ii 1))) 8) (char-&gt;int (md5-in ii))))&lt;br /&gt;       (set 'ii (+ ii 4)))&lt;br /&gt;  (transform in)&lt;br /&gt;&lt;br /&gt;  ;; store buffer in digest&lt;br /&gt;  (set 'ii 0)&lt;br /&gt;  (for (i 0 3 1)&lt;br /&gt;       (nth-set (md5-digest ii) (&amp; (md5-buf i) 0xff))&lt;br /&gt;       (nth-set (md5-digest (+ ii 1)) (&amp; (&gt;&gt; (md5-buf i) 8) 0xff))&lt;br /&gt;       (nth-set (md5-digest (+ ii 2)) (&amp; (&gt;&gt; (md5-buf i) 16)  0xff))&lt;br /&gt;       (nth-set (md5-digest (+ ii 3)) (&amp; (&gt;&gt; (md5-buf i) 24)  0xff))&lt;br /&gt;       (set 'ii (+ ii 4))))&lt;br /&gt;&lt;br /&gt;(define (transform  in)&lt;br /&gt;  (set 'a (md5-buf 0))&lt;br /&gt;  (set 'b (md5-buf 1))&lt;br /&gt;  (set 'c (md5-buf 2))&lt;br /&gt;  (set 'd (md5-buf 3))&lt;br /&gt;&lt;br /&gt;  ;; Round 1&lt;br /&gt;  (set 'S11 7)&lt;br /&gt;  (set 'S12 12)&lt;br /&gt;  (set 'S13 17)&lt;br /&gt;  (set 'S14 22)&lt;br /&gt;  (set 'a (FF a b c d (in 0) S11 3614090360)) &lt;br /&gt;  (set 'd (FF d a b c (in 1) S12 3905402710)) &lt;br /&gt;  (set 'c (FF c d a b (in 2) S13  606105819)) &lt;br /&gt;  (set 'b (FF b c d a (in 3) S14 3250441966)) &lt;br /&gt;  (set 'a (FF a b c d (in 4) S11 4118548399)) &lt;br /&gt;  (set 'd (FF d a b c (in 5) S12 1200080426)) &lt;br /&gt;  (set 'c (FF c d a b (in 6) S13 2821735955)) &lt;br /&gt;  (set 'b (FF b c d a (in 7) S14 4249261313)) &lt;br /&gt;  (set 'a (FF a b c d (in 8) S11 1770035416)) &lt;br /&gt;  (set 'd (FF d a b c (in 9) S12 2336552879)) &lt;br /&gt;  (set 'c (FF c d a b (in 10) S13 4294925233))&lt;br /&gt;  (set 'b (FF b c d a (in 11) S14 2304563134))&lt;br /&gt;  (set 'a (FF a b c d (in 12) S11 1804603682))&lt;br /&gt;  (set 'd (FF d a b c (in 13) S12 4254626195))&lt;br /&gt;  (set 'c (FF c d a b (in 14) S13 2792965006))&lt;br /&gt;  (set 'b (FF b c d a (in 15) S14 1236535329))&lt;br /&gt;&lt;br /&gt;  ;; Round 2 &lt;br /&gt;  (set 'S21 5)&lt;br /&gt;  (set 'S22 9)&lt;br /&gt;  (set 'S23 14)&lt;br /&gt;  (set 'S24 20)&lt;br /&gt;  (set 'a (GG a b c d (in 1) S21 4129170786)) &lt;br /&gt;  (set 'd (GG d a b c (in 6) S22 3225465664)) &lt;br /&gt;  (set 'c (GG c d a b (in 11) S23  643717713))&lt;br /&gt;  (set 'b (GG b c d a (in 0) S24 3921069994)) &lt;br /&gt;  (set 'a (GG a b c d (in 5) S21 3593408605)) &lt;br /&gt;  (set 'd (GG d a b c (in 10) S22   38016083))&lt;br /&gt;  (set 'c (GG c d a b (in 15) S23 3634488961))&lt;br /&gt;  (set 'b (GG b c d a (in 4) S24 3889429448)) &lt;br /&gt;  (set 'a (GG a b c d (in 9) S21  568446438)) &lt;br /&gt;  (set 'd (GG d a b c (in 14) S22 3275163606))&lt;br /&gt;  (set 'c (GG c d a b (in 3) S23 4107603335)) &lt;br /&gt;  (set 'b (GG b c d a (in 8) S24 1163531501)) &lt;br /&gt;  (set 'a (GG a b c d (in 13) S21 2850285829))&lt;br /&gt;  (set 'd (GG d a b c (in 2) S22 4243563512)) &lt;br /&gt;  (set 'c (GG c d a b (in 7) S23 1735328473)) &lt;br /&gt;  (set 'b (GG b c d a (in 12) S24 2368359562))&lt;br /&gt;&lt;br /&gt;  ;; Round 3 &lt;br /&gt;  (set 'S31 4)&lt;br /&gt;  (set 'S32 11)&lt;br /&gt;  (set 'S33 16)&lt;br /&gt;  (set 'S34 23)&lt;br /&gt;  (set 'a (HH a b c d (in 5) S31 4294588738)) &lt;br /&gt;  (set 'd (HH d a b c (in 8) S32 2272392833)) &lt;br /&gt;  (set 'c (HH c d a b (in 11) S33 1839030562))&lt;br /&gt;  (set 'b (HH b c d a (in 14) S34 4259657740))&lt;br /&gt;  (set 'a (HH a b c d (in 1) S31 2763975236)) &lt;br /&gt;  (set 'd (HH d a b c (in 4) S32 1272893353)) &lt;br /&gt;  (set 'c (HH c d a b (in 7) S33 4139469664)) &lt;br /&gt;  (set 'b (HH b c d a (in 10) S34 3200236656))&lt;br /&gt;  (set 'a (HH a b c d (in 13) S31  681279174))&lt;br /&gt;  (set 'd (HH d a b c (in 0) S32 3936430074)) &lt;br /&gt;  (set 'c (HH c d a b (in 3) S33 3572445317)) &lt;br /&gt;  (set 'b (HH b c d a (in 6) S34   76029189)) &lt;br /&gt;  (set 'a (HH a b c d (in 9) S31 3654602809)) &lt;br /&gt;  (set 'd (HH d a b c (in 12) S32 3873151461))&lt;br /&gt;  (set 'c (HH c d a b (in 15) S33  530742520))&lt;br /&gt;  (set 'b (HH b c d a (in 2) S34 3299628645)) &lt;br /&gt;&lt;br /&gt;  ;; Round 4 &lt;br /&gt;  (set 'S41 6)&lt;br /&gt;  (set 'S42 10)&lt;br /&gt;  (set 'S43 15)&lt;br /&gt;  (set 'S44 21)&lt;br /&gt;  (set 'a (II a b c d (in 0) S41 4096336452)) &lt;br /&gt;  (set 'd (II d a b c (in 7) S42 1126891415)) &lt;br /&gt;  (set 'c (II c d a b (in 14) S43 2878612391))&lt;br /&gt;  (set 'b (II b c d a (in 5) S44 4237533241)) &lt;br /&gt;  (set 'a (II a b c d (in 12) S41 1700485571))&lt;br /&gt;  (set 'd (II d a b c (in 3) S42 2399980690)) &lt;br /&gt;  (set 'c (II c d a b (in 10) S43 4293915773))&lt;br /&gt;  (set 'b (II b c d a (in 1) S44 2240044497)) &lt;br /&gt;  (set 'a (II a b c d (in 8) S41 1873313359)) &lt;br /&gt;  (set 'd (II d a b c (in 15) S42 4264355552))&lt;br /&gt;  (set 'c (II c d a b (in 6) S43 2734768916)) &lt;br /&gt;  (set 'b (II b c d a (in 13) S44 1309151649))&lt;br /&gt;  (set 'a (II a b c d (in 4) S41 4149444226)) &lt;br /&gt;  (set 'd (II d a b c (in 11) S42 3174756917))&lt;br /&gt;  (set 'c (II c d a b (in 2) S43  718787259)) &lt;br /&gt;  (set 'b (II b c d a (in 9) S44 3951481745)) &lt;br /&gt;&lt;br /&gt;  (nth-set (md5-buf 0) (+ a (md5-buf 0)))&lt;br /&gt;  (nth-set (md5-buf 1) (+ b (md5-buf 1)))&lt;br /&gt;  (nth-set (md5-buf 2) (+ c (md5-buf 2)))&lt;br /&gt;  (nth-set (md5-buf 3) (+ d (md5-buf 3))))&lt;br /&gt;&lt;br /&gt;(define (md5-string str)&lt;br /&gt;  (md5-init)&lt;br /&gt;  (md5-update str (length str))&lt;br /&gt;  (md5-final)&lt;br /&gt;  (set 'result "")&lt;br /&gt;  (for (i 0 15 1)&lt;br /&gt;       (set 'result (append result (format "%02x" (md5-digest i)))))&lt;br /&gt;  result)&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Thu, 14 Sep 2006 05:52:51 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2591</guid>
      <author>frontera000 (bob bae)</author>
    </item>
    <item>
      <title>finding md5 in python</title>
      <link>http://snippets.dzone.com/posts/show/146</link>
      <description>&lt;code&gt;&lt;br /&gt;import md5&lt;br /&gt;hash = md5.new("Hello world").digest()&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;more info here http://docs.python.org/lib/module-md5.html</description>
      <pubDate>Wed, 13 Apr 2005 01:49:01 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/146</guid>
      <author>korakot (Korakot Chaovavanich)</author>
    </item>
  </channel>
</rss>
