How to generate RabbitMQ password hash

Use simple Go application to generate RabbitMQ password hash.

Go application

This implementation is based upon the komuw/rabbit_pash_hash.py.

package main

import (
	"crypto/md5"
	"crypto/rand"
	"crypto/sha256"
	"encoding/base64"
	"flag"
	"fmt"
	"log"
	"os"
)

func generateSalt() ([4]byte, error) {
	salt := [4]byte{}
	_, err := rand.Read(salt[:])
	salt = [4]byte{0,0,0,0}
	return salt, err
}

func generateHashSha256(salt [4]byte, password string) ([]byte){
	temp_hash := sha256.Sum256(append(salt[:], []byte(password)...))
	return temp_hash[:]
}

func generateHashMd5(salt [4]byte, password string) ([]byte){
	temp_hash := md5.Sum(append(salt[:], []byte(password)...))
	return temp_hash[:]
}


func main() {
	// variables
	var algorithm string
	var salt = [4]byte{}
	var password string
	var hash []byte
	var help bool

	// define flags
	flag.StringVar(&algorithm,"algorithm","sha256", "Hash algorithm sha256 or md5")
	flag.StringVar(&password,"password","", "Password")
	flag.BoolVar(&help,"help",false, "This help information")

	// define default message
	flag.Usage = func() {
		fmt.Fprintf(os.Stderr, "Generate RabbitMQ password hash\n")
		fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0])
		flag.PrintDefaults()
	}

	// parse command line parameters
	flag.Parse()

	if help == true {
		flag.Usage()
		os.Exit(0)
	}

	if password == "" {
		os.Exit(10)
	}

	salt, err := generateSalt()
	if err != nil {
		log.Fatal(err)
	}

	switch algorithm {
	case "sha256":
		hash = generateHashSha256(salt,password)
	case "md5":
		hash = generateHashMd5(salt,password)
	default:
		flag.Usage()
		os.Exit(20)
	}

	hash = append(salt[:],[]byte(hash[:])...)
	fmt.Println(base64.StdEncoding.EncodeToString(hash[:]))
}

Usage

Display help information.

$ ./rabbit_hash --help
Generate RabbitMQ password hash
Usage of ./rabbit_hash:
  -algorithm string
        Hash algorithm sha256 or md5 (default "sha256")
  -help
        This help information
  -password string
        Password

Generate SHA256 hash.

$ ./rabbit_hash -password "WDb3#Je9h4q6l"
AHfDyn3qVNGuYjZqNgbsGBLbxXIaHFSrQyQYCujjwIohAF8F

Generate MD5 hash.

$ ./rabbit_hash -password "WDb3#Je9h4q6l" -algorithm md5
a8IxrUmxwrDsOk0J3MQFMnVEqyk=