Bagaimana cara mengonversi String
ke SecureString
?
c#
.net
security
securestring
Pengembang404
sumber
sumber
12345
... itu jenis barang yang dimiliki orang idiot di kopernya!"*****
AppendChar
tidak dieksekusi hingga run time, jadi karakter tersebut masih dapat dibaca dari IL, bukan? Mungkin beberapa kebingungan waktu kompilasi akan membantu juga ... yaitu, jika Anda membuat sandi dengan keras.Ada juga cara lain untuk mengonversi antara
SecureString
danString
.1. String ke SecureString
2. SecureString ke String
Ini tautannya
sumber
SecureString
jika kode Anda membuatstring
objek dengan nilai yang ingin Anda amankan. TujuannyaSecureString
adalah menghindari string dalam memori yang dikelola, sehingga penyerang yang memeriksa memori tersebut dapat menemukan nilai yang ingin Anda sembunyikan. KarenaNetworkCredential
konstruktor yang Anda panggil memerlukan string, itu bukan cara untuk pergi ... Tentu, kode Anda adalah cara mudah untuk mengkonversi ke dan dari SecureString, tetapi menggunakannya membuat kode Anda seaman menggunakan yang sederhanastring
SecureString
saat bekerja dengan beberapa perpustakaan. Dan jujur saja di sini, jika seseorang secara aktif memindai memori aplikasi Anda, maka Anda sudah hilang. Bahkan jika Anda telah menggunakan SecureString dengan benar, yang belum pernah saya lihat, akan ada data berharga lainnya untuk diekstrak.metode di bawah ini membantu untuk mengubah string menjadi string aman
sumber
Anda bisa mengikuti ini:
sumber
Berikut ini trik linq murah.
sumber
Aku akan membuang ini ke sana. Mengapa?
Anda tidak bisa begitu saja mengubah semua string Anda menjadi string aman dan tiba-tiba aplikasi Anda "aman". String aman dirancang untuk menjaga agar string tetap dienkripsi selama mungkin, dan hanya didekripsi untuk waktu yang sangat singkat, menghapus memori setelah operasi dilakukan padanya.
Saya berani mengatakan bahwa Anda mungkin memiliki beberapa masalah tingkat desain untuk ditangani sebelum khawatir tentang mengamankan string aplikasi Anda. Beri kami beberapa informasi lebih lanjut tentang apa yang Anda coba lakukan dan kami mungkin dapat membantu dengan lebih baik.
sumber
sumber
tidak ada linq mewah, tidak menambahkan semua karakter dengan tangan, hanya polos dan sederhana:
sumber
var sc = new SecureString(); foreach(char c in "foo") sc.appendChar(c);
Saya setuju dengan Spence (+1), tetapi jika Anda melakukannya untuk mempelajari atau menguji pourposes, Anda dapat menggunakan foreach dalam string, menambahkan setiap karakter ke securestring menggunakan metode AppendChar.
sumber
Saya hanya ingin menunjukkan kepada semua orang yang berkata, "Bukan itu intinya
SecureString
", bahwa banyak orang yang menanyakan pertanyaan ini mungkin dalam aplikasi di mana, untuk alasan apa pun, dibenarkan atau tidak, mereka tidak terlalu peduli tentang memiliki salinan sementara kata sandi berada di heap sebagai string yang dapat digunakan GC, tetapi mereka harus menggunakan API yang hanya menerimaSecureString
objek. Jadi, Anda memiliki aplikasi yang tidak Anda pedulikanapakah kata sandi ada di heap, mungkin itu hanya penggunaan internal dan kata sandi hanya ada di sana karena diperlukan oleh protokol jaringan yang mendasarinya, dan Anda menemukan bahwa string tempat kata sandi disimpan tidak dapat digunakan misalnya untuk mengatur PowerShell jarak jauh Runspace - tetapi tidak ada satu baris yang mudah dan lurus ke depan untuk membuatSecureString
yang Anda butuhkan. Ini adalah ketidaknyamanan kecil - tetapi mungkin sepadan untuk memastikan bahwa aplikasi yang benar - benar membutuhkanSecureString
tidak menggoda penulis untuk menggunakanSystem.String
atauSystem.Char[]
perantara. :-)sumber
Jika Anda ingin memampatkan konversi dari a
string
ke aSecureString
menjadiLINQ
pernyataan, Anda dapat mengekspresikannya sebagai berikut:Namun, perlu diingat bahwa menggunakan
LINQ
tidak meningkatkan keamanan solusi ini. Itu menderita cacat yang sama seperti setiap konversi daristring
menjadiSecureString
. Selama dokumen aslistring
tetap ada di memori, data rentan.Yang sedang berkata, apa yang dapat ditawarkan pernyataan di atas adalah menjaga bersama pembuatan
SecureString
, inisialisasi dengan data dan akhirnya menguncinya dari modifikasi.sumber
2 ekstensi berikut harus melakukan triknya:
Untuk sebuah
char
arrayDan untuk
string
Terima kasih kepada John Dagg atas
AppendChar
rekomendasinya.sumber
Anda dapat menggunakan skrip sederhana ini
sumber