2014-09-27 4 views
5

У меня размерный массив байтов, который я получил после md5.Sum().Как преобразовать [Size] byte в строку в Go?

data := []byte("testing") 
var pass string 
var b [16]byte 
b = md5.Sum(data) 
pass = string(b) 

Я получаю ошибку:

cannot convert b (type [16]byte) to type string

+3

Я хотел бы указать, что создание такого пароля без какой-либо соли крайне небезопасно и плохой идеей. – OneOfOne

ответ

14

Вы можете обратиться к нему как срез:

pass = string(b[:]) 
10

Немного поздно, но имейте в виду, что с помощью string(b[:]) напечатает mos недействительными символами.

Если вы пытаетесь получить шестнадцатеричное представление о нем, как PHP, вы можете использовать что-то вроде:

data := []byte("testing") 
b := md5.Sum(data) 

//this is mostly invalid characters 
fmt.Println(string(b[:])) 

pass := hex.EncodeToString(b[:]) 
fmt.Println(pass) 
// or 
pass = fmt.Sprintf("%x", b) 
fmt.Println(pass) 

playground

+0

Использование 'string (b [:])' ничего не печатает. – rightfold

+0

@ rightfold Я имел в виду, если вы попытаетесь напечатать полученную строку. – OneOfOne

+0

Зависит от того, как вы его печатаете. – rightfold

0

может быть решена с помощью этой

pass = fmt.Sprintf("%x", b) 

или

import "encoding/base64" 
pass = base64.StdEncoding.EncodeToString(b[:]) 

это будет кодировать его в base64 string

Смежные вопросы