среда, 27 февраля 2019 г.

Go Code Review Comments: Пакет Crypto Rand

Не используйте пакет math/rand для генерации ключей, даже одноразовых. Без заданного семени, генератор полностью предсказуем. Заданный с семенем time.Nanoseconds(), присутствует всего несколько бит энтропии. Вместо этого используйте crypto/rand Reader, и если вам нужен текст, напечатайте в шестнадцатеричной или base64 кодировке:

import (
    "crypto/rand"
    // "encoding/base64"
    // "encoding/hex"
    "fmt"
)

func Key() string {
    buf := make([]byte, 16)
    _, err := rand.Read(buf)
    if err != nil {
        // потеря случайности, никогда не должна произойти
        panic(err)  
    }
    return fmt.Sprintf("%x", buf)
    // or hex.EncodeToString(buf)
    // or base64.StdEncoding.EncodeToString(buf)
}


Читайте также:


Комментариев нет:

Отправить комментарий