diff --git a/src/gomd5/main.go b/src/gomd5/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..05d948b134d9f47af2762b4cc870599e4fcc7df8
--- /dev/null
+++ b/src/gomd5/main.go
@@ -0,0 +1,34 @@
+package main
+
+import (
+	"crypto/md5"
+	"fmt"
+	"io"
+	"os"
+)
+
+func main() {
+	if len(os.Args) < 2 {
+		fmt.Println("Usage: gomd5 [file ...]")
+	}
+	files := os.Args[1:]
+	for _, file := range files {
+		if err := processFile(file); err != nil {
+			fmt.Fprintf(os.Stderr, "gomd5: %v", err)
+		}
+	}
+}
+
+func processFile(filename string) error {
+	f, err := os.Open(filename)
+	if err != nil {
+		return err
+	}
+	defer f.Close()
+	h := md5.New()
+	if _, err := io.Copy(h, f); err != nil {
+		return err
+	}
+	fmt.Printf("%x\n", h.Sum(nil))
+	return nil
+}