Saya mencari kebingungan yang sangat sederhana (seperti mengenkripsi dan mendekripsi tetapi belum tentu aman) untuk beberapa data. Itu bukan misi kritis. Saya butuh sesuatu untuk membuat orang jujur jujur, tetapi sesuatu yang sedikit lebih kuat dari ROT13 atau Base64 .
Saya lebih suka sesuatu yang sudah termasuk dalam .NET framework 2.0, jadi saya tidak perlu khawatir tentang ketergantungan eksternal.
Saya benar-benar tidak ingin harus dipusingkan dengan kunci publik / pribadi, dll. Saya tidak tahu banyak tentang enkripsi, tetapi saya cukup tahu untuk mengetahui bahwa apa pun yang saya tulis akan kurang berharga ... Sebenarnya, Saya mungkin akan mengacaukan matematika dan membuatnya mudah untuk retak.
c#
obfuscation
Matt Dawdy
sumber
sumber
Jawaban:
Jawaban lain di sini berfungsi dengan baik, tetapi AES adalah algoritma enkripsi yang lebih aman dan terkini. Ini adalah kelas yang saya peroleh beberapa tahun yang lalu untuk melakukan enkripsi AES yang telah saya modifikasi dari waktu ke waktu agar lebih ramah untuk aplikasi web (mis. Saya telah membangun metode Enkripsi / Dekripsi yang berfungsi dengan string URL-friendly). Ini juga memiliki metode yang bekerja dengan array byte.
CATATAN: Anda harus menggunakan nilai yang berbeda dalam array Key (32 bytes) dan Vector (16 bytes)! Anda tidak ingin seseorang mengetahui kunci Anda hanya dengan mengasumsikan bahwa Anda menggunakan kode ini apa adanya! Yang harus Anda lakukan adalah mengubah beberapa angka (harus <= 255) dalam array Kunci dan Vektor (saya meninggalkan satu nilai yang tidak valid dalam array Vektor untuk memastikan Anda melakukan ini ...). Anda dapat menggunakan https://www.random.org/bytes/ untuk menghasilkan set baru dengan mudah:
Key
Vector
Menggunakannya mudah: cukup instantiate kelas lalu panggil (biasanya) EncryptToString (string StringToEncrypt) dan DecryptString (string StringToDecrypt) sebagai metode. Tidak mungkin lebih mudah (atau lebih aman) setelah Anda memiliki kelas ini di tempat.
sumber
Saya membersihkan SimpleAES (di atas) untuk saya gunakan. Memperbaiki metode enkripsi / dekripsi berbelit-belit; metode yang terpisah untuk mengkode byte buffer, string, dan string ramah URL; memanfaatkan perpustakaan yang ada untuk pengkodean URL.
Kode ini kecil, lebih sederhana, lebih cepat dan outputnya lebih ringkas. Misalnya,
[email protected]
menghasilkan:Kode:
sumber
Ya, tambahkan
System.Security
perakitan, imporSystem.Security.Cryptography
namespace. Berikut adalah contoh sederhana enkripsi algoritma simetris (DES):sumber
Hanya berpikir saya akan menambahkan bahwa saya telah meningkatkan Mud's SimplerAES dengan menambahkan IV acak yang dilewatkan kembali ke dalam string terenkripsi. Ini meningkatkan enkripsi karena mengenkripsi string yang sama akan menghasilkan output yang berbeda setiap kali.
Dan tes unit bonus
sumber
System.Random
sebagai RNG. 2) Ini benar-benar rusak terhadap serangan ciphertext yang dipilih (khususnya padding-Varian dari Marks (excellent) answer
Semoga ini membantu
sumber
[EDIT] Bertahun-tahun kemudian, saya kembali untuk mengatakan: jangan lakukan ini! Lihat Apa yang salah dengan enkripsi XOR? untuk detail.
Enkripsi dua arah yang sangat sederhana dan mudah adalah enkripsi XOR.
mypass
.mypassmypassmypass...
)mypassmypassmypass...
).sumber
Saya menggabungkan apa yang saya temukan yang terbaik dari beberapa jawaban dan komentar.
Kode:
Pembaruan 2015-07-18: Memperbaiki kesalahan dalam metode Encrypt () pribadi dengan komentar @bpsilver dan @Evereq. IV sengaja dienkripsi, sekarang ditulis dalam teks yang jelas seperti yang diharapkan oleh Decrypt ().
sumber
return _encryptor.TransformFinalBlock(inputBuffer, 0, inputBuffer.Length);
byte [] inputBuffer = _encryptor.TransformFinalBlock(buffer, 0, buffer.Length); return _rijndael.IV.Concat(inputBuffer).ToArray();
Jika Anda hanya ingin enkripsi sederhana (yaitu, mungkin untuk cracker yang ditentukan untuk istirahat, tetapi mengunci sebagian besar pengguna biasa), cukup pilih dua frasa sandi dengan panjang yang sama, katakan:
dan xor data Anda dengan keduanya (lewati kata sandi jika perlu) (a) . Sebagai contoh:
Seseorang yang mencari biner Anda mungkin berpikir bahwa string DNA adalah kunci, tetapi mereka tidak akan berpikir bahwa kode C adalah apa pun selain memori yang tidak diinisialisasi yang disimpan dengan biner Anda.
(a) Perlu diingat bahwa ini adalah enkripsi yang sangat sederhana dan, dengan beberapa definisi, mungkin tidak dianggap sebagai enkripsi sama sekali (karena maksud dari enkripsi adalah untuk mencegah akses yang tidak sah daripada hanya membuatnya lebih sulit). Meskipun, tentu saja, bahkan enkripsi terkuat tidak aman ketika seseorang berdiri di atas pemegang kunci dengan pipa baja.
Seperti yang dinyatakan dalam kalimat pertama, ini adalah sarana untuk membuatnya cukup sulit bagi penyerang kasual yang akan mereka jalani. Ini mirip dengan mencegah pencurian di rumah Anda - Anda tidak perlu membuatnya tidak bisa ditembus, Anda hanya perlu membuatnya lebih tidak bisa hamil daripada rumah di sebelah :-)
sumber
Enkripsi mudah: seperti yang telah ditunjukkan orang lain, ada kelas-kelas di namespace System.Security.Cryptography yang melakukan semua pekerjaan untuk Anda. Gunakan mereka daripada solusi buatan sendiri.
Tapi dekripsi juga mudah. Masalah yang Anda miliki bukan algoritma enkripsi, tetapi melindungi akses ke kunci yang digunakan untuk dekripsi.
Saya akan menggunakan salah satu solusi berikut:
DPAPI menggunakan kelas ProtectedData dengan cakupan CurrentUser. Ini mudah karena Anda tidak perlu khawatir tentang kunci. Data hanya dapat didekripsi oleh pengguna yang sama, jadi tidak baik untuk berbagi data antar pengguna atau mesin.
DPAPI menggunakan kelas ProtectedData dengan cakupan LocalMachine. Baik untuk misalnya melindungi data konfigurasi pada satu server aman. Tapi siapa pun yang bisa masuk ke mesin bisa mengenkripsi itu, jadi tidak ada gunanya kecuali server aman.
Algoritma simetris apa pun. Saya biasanya menggunakan metode SymmetricAlgorithm.Create () statis jika saya tidak peduli algoritma apa yang digunakan (sebenarnya itu adalah Rijndael secara default). Dalam hal ini Anda perlu melindungi kunci Anda. Misalnya Anda dapat mengaburkan dalam beberapa cara dan menyembunyikannya di kode Anda. Namun ketahuilah bahwa siapa pun yang cukup pintar untuk mendekompilasi kode Anda kemungkinan akan dapat menemukan kuncinya.
sumber
Saya ingin memposting solusi saya karena tidak ada solusi di atas yang semudah milik saya. Biarkan aku tahu apa yang Anda pikirkan:
Pilihan
Ini mengasumsikan bahwa MachineKey dari server yang digunakan untuk mengenkripsi nilai sama dengan yang digunakan untuk mendekripsi nilai. Jika diinginkan, Anda dapat menentukan MachineKey statis di Web.config sehingga aplikasi Anda dapat mendekripsi / mengenkripsi data di mana pun dijalankan (mis. Pengembangan vs. server produksi). Anda dapat membuat kunci mesin statis mengikuti instruksi ini .
sumber
Namespace
System.Security.Cryptography
berisiTripleDESCryptoServiceProvider
danRijndaelManaged
kelas - kelasJangan lupa untuk menambahkan referensi ke
System.Security
majelis.sumber
Menggunakan TripleDESCryptoServiceProvider di System.Security.Cryptography :
sumber
Saya mengubah ini :
untuk ini:
sumber
Menggunakan pustaka Kriptografi .Net bawaan, contoh ini menunjukkan cara menggunakan Advanced Encryption Standard (AES).
sumber
Saya tahu Anda mengatakan Anda tidak peduli seberapa amannya, tetapi jika Anda memilih DES, Anda sebaiknya menggunakan AES itu adalah metode enkripsi yang lebih mutakhir.
sumber
Saya telah menggunakan jawaban yang diterima oleh Mark Brittingham dan itu banyak membantu saya. Baru-baru ini saya harus mengirim teks terenkripsi ke organisasi yang berbeda dan di situlah beberapa masalah muncul. OP tidak memerlukan opsi ini tetapi karena ini adalah pertanyaan populer, saya memposting modifikasi saya (
Encrypt
danDecrypt
fungsi yang dipinjam dari sini ):RijndaelManaged
nilai default , dan satu di mana nilai properti dapat ditentukan (berdasarkan kesepakatan bersama antara pihak enkripsi dan dekripsi)Inilah kelasnya (sampel uji di akhir):
dan..
Berikut adalah contoh uji:
sumber
Saya pikir ini adalah dunia yang paling sederhana!
Uji
sumber