GO_INTERVIEW_LIB Telegram 590
💬 Почему для генерации ключей в Go нельзя использовать math/rand, и как правильно сгенерировать безопасный ключ?

1. Без явного вызова rand.Seed() генератор math/rand всегда возвращает одну и ту же последовательность чисел.
2. Если использовать time.Now().UnixNano() как seed, доступно всего несколько бит энтропии, что делает последовательности легко предсказуемыми.
3. math/rand не подходит для криптографических задач, так как его алгоритм детерминированный и может быть взломан.

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) // out of randomness, should never happen
}
return fmt.Sprintf("%x", buf)
// or hex.EncodeToString(buf)
// or base64.StdEncoding.EncodeToString(buf)
}
👍223



tgoop.com/go_interview_lib/590
Create:
Last Update:

💬 Почему для генерации ключей в Go нельзя использовать math/rand, и как правильно сгенерировать безопасный ключ?

1. Без явного вызова rand.Seed() генератор math/rand всегда возвращает одну и ту же последовательность чисел.
2. Если использовать time.Now().UnixNano() как seed, доступно всего несколько бит энтропии, что делает последовательности легко предсказуемыми.
3. math/rand не подходит для криптографических задач, так как его алгоритм детерминированный и может быть взломан.

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) // out of randomness, should never happen
}
return fmt.Sprintf("%x", buf)
// or hex.EncodeToString(buf)
// or base64.StdEncoding.EncodeToString(buf)
}

BY Библиотека Go для собеса | вопросы с собеседований


Share with your friend now:
tgoop.com/go_interview_lib/590

View MORE
Open in Telegram


Telegram News

Date: |

5Telegram Channel avatar size/dimensions Joined by Telegram's representative in Brazil, Alan Campos, Perekopsky noted the platform was unable to cater to some of the TSE requests due to the company's operational setup. But Perekopsky added that these requests could be studied for future implementation. Telegram Android app: Open the chats list, click the menu icon and select “New Channel.” Members can post their voice notes of themselves screaming. Interestingly, the group doesn’t allow to post anything else which might lead to an instant ban. As of now, there are more than 330 members in the group. Telegram iOS app: In the “Chats” tab, click the new message icon in the right upper corner. Select “New Channel.”
from us


Telegram Библиотека Go для собеса | вопросы с собеседований
FROM American