Saya ingin membuat string unik acak seperti yang dibuat oleh perpustakaan MSDN. ( Objek Kesalahan ), misalnya. String seperti 't9zk6eay' harus dibuat.
97
Saya ingin membuat string unik acak seperti yang dibuat oleh perpustakaan MSDN. ( Objek Kesalahan ), misalnya. String seperti 't9zk6eay' harus dibuat.
string randoms = Guid.NewGuid().ToString().Replace("-", string.Empty).Replace("+", string.Empty).Substring(0, 4);
lebih dapat ditemukan di siniJawaban:
Menggunakan Guid akan menjadi cara yang cukup bagus, tetapi untuk mendapatkan sesuatu yang tampak seperti contoh Anda, Anda mungkin ingin mengubahnya menjadi string Base64:
Saya menyingkirkan "=" dan "+" untuk lebih mendekati contoh Anda, jika tidak, Anda mendapatkan "==" di akhir string dan "+" di tengah. Berikut contoh string keluaran:
"OZVV5TpP4U6wJthaCORZEQ"
sumber
Convert.ToBase64String
itu, lihat di sini .new Guid()
tanpa "peretasan" (merusak jam atau struktur data internal Windows). Jangan ragu untuk menggunakan core, thread, primitif sinkronisasi, dll. Sesuka Anda.Perbarui 2016/1/23
Jika Anda merasa jawaban ini berguna, Anda mungkin tertarik dengan pustaka pembuatan kata sandi sederhana (~ 500 SLOC) yang saya terbitkan :
Kemudian Anda dapat membuat string acak seperti pada jawaban di bawah ini:
Satu keuntungan dari pustaka adalah bahwa kodenya lebih baik difaktorkan sehingga Anda dapat menggunakan keacakan aman untuk lebih dari sekadar menghasilkan string . Lihat situs proyek untuk lebih jelasnya.
Jawaban Asli
Karena belum ada yang memberikan kode aman, saya memposting yang berikut ini jika ada yang menganggapnya berguna.
Terima kasih kepada Ahmad karena telah menunjukkan cara menjalankan kode pada .NET Core.
sumber
.netcore
: Gantivar rng = new RNGCryptoServiceProvider()
denganvar rng = RandomNumberGenerator.Create()
Saya akan mengingatkan bahwa GUID bukanlah nomor acak . Mereka tidak boleh digunakan sebagai dasar untuk menghasilkan apa pun yang Anda harapkan benar-benar acak (lihat http://en.wikipedia.org/wiki/Globally_Unique_Identifier ):
Sebagai gantinya, cukup gunakan metode C # Random. Sesuatu seperti ini ( kode ditemukan di sini ):
GUID tidak masalah jika Anda menginginkan sesuatu yang unik (seperti nama file atau kunci unik dalam database), tetapi GUID tidak baik untuk sesuatu yang Anda inginkan secara acak (seperti kata sandi atau kunci enkripsi). Jadi itu tergantung aplikasi Anda.
Edit . Microsoft mengatakan bahwa Random juga tidak terlalu bagus ( http://msdn.microsoft.com/en-us/library/system.random(VS.71).aspx ):
sumber
Saya menyederhanakan solusi @Michael Kropats dan membuat versi LINQ-esque.
sumber
Saya tidak berpikir bahwa mereka benar-benar acak, tetapi tebakan saya adalah beberapa hash.
Setiap kali saya membutuhkan pengenal acak, saya biasanya menggunakan GUID dan mengubahnya menjadi representasi "telanjang":
sumber
Coba kombinasi antara Guid dan Time.Ticks
sumber
Saya terkejut mengapa tidak ada solusi CrytpoGraphic. GUID itu unik tetapi tidak aman secara kriptografis . Lihat Biola Dotnet ini.
Jika Anda ingin menambahkan dengan Panduan:
String alfanumerik yang lebih bersih:
sumber
Solusi Michael Kropats di VB.net
sumber
Ini bekerja sempurna untuk saya
sumber
Ini telah ditanyakan dalam berbagai bahasa. Inilah satu pertanyaan tentang kata sandi yang harus diterapkan di sini juga.
Jika Anda ingin menggunakan string untuk memperpendek URL, Anda juga memerlukan Dictionary <> atau pemeriksaan basis data untuk melihat apakah ID yang dihasilkan telah digunakan.
sumber
Jika Anda menginginkan string alfanumerik dengan karakter huruf kecil dan huruf besar ([a-zA-Z0-9]), Anda dapat menggunakan Convert.ToBase64String () untuk solusi yang cepat dan sederhana.
Untuk keunikan, periksa masalah birthday untuk menghitung seberapa besar kemungkinan tumbukan diberikan (A) panjang string yang dihasilkan dan (B) jumlah string yang dihasilkan.
sumber
sumber
Dapatkan Kunci Unik menggunakan kode Hash GUID
sumber