Nasıl kullanılır
- "Uzunluk" değerini girin ve "Birim" ayarında bu değerin rastgele bayt sayısı mı ("Rastgele bayt") yoksa Base64 karakter sayısı mı ("Karakter") olduğunu seçin. Anahtar oluşturuyorsanız bayt kullanın: 32 bayt, 256 bitlik bir anahtar demektir.
- Kaç dizeye ihtiyacınız olduğunu "Adet" alanına girin ve "Ayırıcı" olarak "Yeni satır", "Virgül" veya "Boşluk" seçeneğini belirleyin.
- "Standart" veya "URL güvenli" varyantı seçin. Bayt birimiyle çalışırken hedef sistem = işaretlerini beklemiyorsa "Dolgu" seçeneğini de kapatabilirsiniz.
- Yeni değerler için "Oluştur" düğmesine tıklayın, ardından listeyi "Tümünü kopyala" ile kopyalayın veya "İndir" ile indirin.
Bayt, karakter ve entropi
Rastgele bir dizenin gücü bit cinsinden entropiyle ölçülür. Her rastgele bayt 8 bit ekler; dolayısıyla 16 bayt 128 bit, 32 bayt ise 256 bit verir. Base64 yalnızca bu baytların nasıl yazıldığını değiştirir: her karakter 6 bit taşır ve her 3 bayt 4 karaktere dönüşür. Araç her dizenin entropisini gösterir, böylece bunu bir bakışta kontrol edebilirsiniz.
Bayt biriminde çıktının kodu çözüldüğünde tam olarak o sayıda rastgele bayt elde edilir; anahtarların ve gizli değerlerin ihtiyaç duyduğu da budur. Karakter biriminde ise her biri 64 karakterlik alfabeden eşit olasılıkla seçilen, tam olarak istenen sayıda karakter elde edersiniz; bir sistem sabit uzunlukta bir token istiyor ve onu metin olarak saklıyorsa bu birimi kullanın.
| Bayt | Base64 karakteri | Entropi | Tipik kullanım |
|---|---|---|---|
| 12 | 16 | 96 bit | AES-GCM nonce değeri (IV) |
| 16 | 24 (dolgusuz 22) | 128 bit | Tuzlar, oturum ve CSRF token'ları, AES-128 anahtarları |
| 32 | 44 (dolgusuz 43) | 256 bit | AES-256 ve HMAC-SHA256 anahtarları, HS256 gizli anahtarları, API anahtarları |
| 64 | 88 (dolgusuz 86) | 512 bit | HMAC-SHA512 anahtarları, HS512 gizli anahtarları |
Rastgele Base64 değerlerinin kullanım alanları
- JWT gizli anahtarları. RFC 7518, HMAC anahtarının en az hash çıktısı kadar uzun olmasını şart koşar: HS256 için 32, HS384 için 48, HS512 için 64 bayt. Bazı kütüphaneler gizli anahtar dizesini olduğu gibi kullanır, bazıları ise önce Base64 kodunu çözer; bu yüzden kullandığınız kütüphanenin hangisini beklediğini kontrol edin. JWT çözücü, HS256'dan HS512'ye kadar olan imzaları her iki tür gizli anahtarla da doğrular; HMAC oluşturucu ise anahtarı metin, onaltılık veya Base64 olarak kabul eder.
- Uygulama anahtarları. Örneğin Laravel, 32 baytlık şifreleme anahtarını
.envdosyasındaAPP_KEY=base64:...biçiminde tutar; bu araçla 32 bayt olarak oluşturulan dizeler de tam olarak bu biçimdedir. - Kubernetes Secret nesneleri.
dataaltındaki değerler dolgulu standart Base64 olmalıdır. Bayt biriminde, Standart varyant ve dolgu açıkken oluşturulan bir dize doğrudan buraya yazılabilir; Pod da ham rastgele baytları alır. Uygulama Base64 metninin kendisini bekliyorsa değeri bunun yerinestringDataaltına koyun. - URL'lerdeki token'lar. Parola sıfırlama bağlantıları, davet kodları ve URL içinde taşınan diğer token'lar,
+ve/karakterlerini-ve_ile değiştiren URL güvenli varyantı kullanmalıdır. Ayrıntılar için Base64URL sayfasına bakın.
Neden Math.random değil de crypto.getRandomValues?
Math.random() hızlı, genel amaçlı bir üreteçtir. Çıktısı öngörülemez olacak şekilde tasarlanmamıştır ve bazı motorlarda iç durum birkaç değerden yola çıkılarak yeniden oluşturulabilir. Bu araç, işletim sistemi tarafından tohumlanan kriptografik olarak güvenli bir üreteç olan crypto.getRandomValues() fonksiyonunu kullanır; bu, openssl rand komutunun ve Python'un secrets modülünün arkasındaki kaynakla aynı türdendir. Değerler cihazınızda oluşturulur ve hiçbir zaman gönderilmez veya saklanmaz.
Kodda rastgele Base64 oluşturma
# Shell: 32 rastgele bayt, Base64 olarak (44 karakter)
openssl rand -base64 32
head -c 32 /dev/urandom | base64
# Python
import base64, secrets
base64.b64encode(secrets.token_bytes(32)).decode()
secrets.token_urlsafe(32) # URL güvenli, dolgusuz, 43 karakter
// Node.js
const crypto = require('crypto');
crypto.randomBytes(32).toString('base64');
crypto.randomBytes(32).toString('base64url'); // URL güvenli, dolgusuz
// Tarayıcı
const bytes = crypto.getRandomValues(new Uint8Array(32));
btoa(String.fromCharCode(...bytes));
Sıkça sorulan sorular
Rastgele bir anahtar veya gizli değer ne kadar uzun olmalı?
Oturum kimlikleri, CSRF token'ları ve tuzlar gibi yalnızca benzersiz ve tahmin edilemez olması gereken değerler için 16 bayt (128 bit) yeterlidir. AES-256 anahtarları, HMAC-SHA256 anahtarları ve HS256 gizli anahtarları için 32 bayt (256 bit), HMAC-SHA512 ve HS512 için ise 64 bayt kullanın.
Bu, openssl rand -base64 32 ile aynı mı?
= ile biter ve kodu çözüldüğünde 32 rastgele bayt verir. Değerlerin kendisi elbette her seferinde farklıdır.Bayt birimini mi, karakter birimini mi kullanmalıyım?
Şifreleme anahtarları ve Kubernetes Secret nesnelerinde olduğu gibi dizenin kodu çözülecekse bayt kullanın. Bir sistem tam olarak belirli uzunlukta bir token istiyor ve metni olduğu gibi kullanıyorsa karakter kullanın. Karakter birimiyle oluşturulan bir dizenin sorunsuz çözülmesi yalnızca uzunluğu 4'ün katı olduğunda garanti edilir.
URL güvenli varyanta ne zaman ihtiyacım olur?
/ URL yollarını böler, + ise form kodlamalı sorgu dizelerinde boşluğa dönüşür. URL güvenli Base64 bunların yerine - ve _ kullanır ve genellikle dolgusuz yazılır.Oluşturulan değerler bir yerde saklanıyor veya bir yere gönderiliyor mu?
Hayır. Değerler tarayıcınızdaki JavaScript tarafından oluşturulur, hiçbir zaman iletilmez ve sayfadan ayrıldığınızda kaybolur. Birini gerçek bir gizli anahtar olarak kullanmaya başladığınızda, onu sohbet mesajlarında veya destek kayıtlarında değil, bir parola yöneticisinde veya gizli anahtar deposunda saklayın.