Menghasilkan String Acak di Go
Menghasilkan string acak sering dibutuhkan di aplikasi Go: bikin token, kata sandi, ID unik, atau nama file sementara. Go punya beberapa cara untuk melakukannya—mulai dari yang sederhana dengan math/rand
, sampai yang aman secara kriptografis dengan crypto/rand
. Ada juga opsi pakai UUID untuk kebutuhan identifikasi standar.
1. math/rand
: String Pseudo-Acak
Cocok buat kebutuhan non-kripto, misalnya bikin nama file random atau ID sementara.
package main
import (
"fmt"
"math/rand"
"time"
)
const letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
func GenerateRandomString(length int) string {
rand.Seed(time.Now().UnixNano())
result := make([]byte, length)
for i := range result {
result[i] = letters[rand.Intn(len(letters))]
}
return string(result)
}
func main() {
fmt.Println("Random String:", GenerateRandomString(10))
}
⚠️ Jangan dipakai untuk token atau password, karena hasilnya bisa ditebak.
2. crypto/rand
: String Aman
Kalau butuh string yang benar-benar acak dan tidak bisa diprediksi (misalnya password, token API, session key), gunakan crypto/rand
.
package main
import (
"crypto/rand"
"fmt"
)
const letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
func GenerateSecureRandomString(length int) (string, error) {
result := make([]byte, length)
_, err := rand.Read(result)
if err != nil {
return "", err
}
for i := range result {
result[i] = letters[int(result[i])%len(letters)]
}
return string(result), nil
}
func main() {
str, _ := GenerateSecureRandomString(10)
fmt.Println("Secure Random String:", str)
}
Hasilnya aman secara kriptografis, cocok untuk sistem sensitif.
3. UUID dengan github.com/google/uuid
Kalau butuh ID unik standar, tinggal pakai UUID.
package main
import (
"fmt"
"github.com/google/uuid"
)
func main() {
id := uuid.New()
fmt.Println("UUID:", id.String())
}
UUID biasanya dipakai di database, sistem terdistribusi, atau identifikasi objek lintas sistem.
Kapan Pakai yang Mana?
Metode | Pakai Kalau… | Jangan Pakai Kalau… |
---|---|---|
math/rand |
Butuh cepat, non-kripto, contoh: nama file random | Token, password, atau sistem sensitif |
crypto/rand |
Token, password, session key—harus aman | Butuh cepat/efisien tanpa keamanan ekstra |
UUID | Perlu ID unik lintas sistem, standar industri | Butuh string acak bebas (bukan format UUID) |
Kesimpulan
math/rand
→ cukup untuk kebutuhan ringan, non-sensitif.crypto/rand
→ pilihan wajib untuk keamanan.uuid
→ praktis untuk ID unik standar.
Dengan milih metode sesuai konteks, string acak di Go bisa jadi cepat dan aman.