Tips SistemThis article applies to a different operating system than the one you are using. Article content that may not be relevant to you is disabled.
Untuk Microsoft Visual Basic.NET versi artikel ini, lihat 301070
(http://support.microsoft.com/kb/301070/
)
.
Artikel ini merujuk kepada Microsoft berikut.NET
Kerangka perpustakaan kelas namespaces:
System.io
System.Security
System.Security.cryptography
Catatan Artikel ini tidak berlaku untuk Microsoft.NET Framework 2.0.
Artikel ini menjelaskan cara menggunakan kriptografi kelas
yang disediakan oleh Microsoft.NET Framework untuk mengenkripsi file teks
negara tidak terbaca, dan kemudian untuk mendekripsi berkas teks itu kembali ke aslinya
format.
The System.Security.cryptographic namespace di Microsoft.NET Framework menyediakan berbagai
alat untuk membantu Anda dengan enkripsi dan dekripsi. The CryptoStream kelas adalah salah satu dari banyak kelas yang disediakan. The CryptoStream kelas ini dirancang untuk mengenkripsi atau mendekripsi konten seperti yang
mengalir keluar ke file.
Klik Visual C# di bawahProyek, lalu klik Aplikasi konsoldi bawah Pola acu. Visual C#.NET menciptakan Statis kelas untuk Anda, bersama dengan kosong Main() prosedur.
Penggunaan menggunakan pernyataan (seperti yang ditunjukkan dalam kode contoh berikut) pada
ruang nama berikut:
Sistem
System.Security
System.Security.cryptography
System.text
System.io
sehingga Anda tidak harus memenuhi syarat Deklarasi dari ini
namespaces kemudian dalam kode Anda. Anda harus menggunakan pernyataan-pernyataan ini sebelum yang lain
Deklarasi.
using System;
using System.IO;
using System.Security;
using System.Security.Cryptography;
using System.Runtime.InteropServices;
using System.Text;
Menghasilkan kunci rahasia untuk mengenkripsi dan mendekripsi data.
The DESCryptoServiceProvider ini didasarkan pada algoritma enkripsi simetris. Simetris
enkripsi memerlukan kunci dan vektor inisialisasi (IV) untuk mengenkripsi
data. Untuk mendekripsi data, Anda harus memiliki tombol yang sama dan IV sama. Anda harus
juga menggunakan algoritma enkripsi yang sama. Anda dapat menghasilkan kunci dengan menggunakan
salah satu metode berikut:
Metode 1 Anda dapat meminta pengguna untuk password. Kemudian, gunakan sandi sebagai
kunci dan IV.
Metode 2 Ketika Anda membuat contoh baru dari simetris kriptografi
kelas, kunci baru dan IV otomatis diciptakan untuk sesi. Penggunaan
kunci dan IV yang dihasilkan oleh kelas kriptografi simetrik dikelola untuk
mengenkripsi dan mendekripsi berkas.
Untuk informasi lebih lanjut tentang cara
menghasilkan dan mendistribusikan kunci, lihat Microsoft.NET Framework SDK
Dokumentasi, atau lihat Website Microsoft Developer Network (MSDN) berikut
situs:
Tambahkan fungsi berikut untuk menghasilkan sebuah kunci baru untuk
sesi (seperti tercantum dalam metode 2 langkah 4):
// Call this function to remove the key from memory after use for security.
[System.Runtime.InteropServices.DllImport("KERNEL32.DLL", EntryPoint="RtlZeroMemory")]
public static extern bool ZeroMemory(ref string Destination, int Length);
// Function to Generate a 64 bits Key.
static string GenerateKey()
{
// Create an instance of Symetric Algorithm. Key and IV is generated automatically.
DESCryptoServiceProvider desCrypto =(DESCryptoServiceProvider)DESCryptoServiceProvider.Create();
// Use the Automatically generated key for Encryption.
return ASCIIEncoding.ASCII.GetString(desCrypto.Key);
}
Menciptakan metode di kelas Anda yang bernama EncryptFile. The EncryptFile kelas harus memiliki tiga parameter berikut:
sInputFilename
sOutputFilename
sKey (Kunci rahasia yang digunakan untuk mengenkripsi dan mendekripsi
berkas.)
Dalam EncryptFile prosedur, membuat input FileStream objek dan output FileStream objek. Objek ini dapat dibaca dari dan ditulis ke target
file.
FileStream fsInput = new FileStream(sInputFilename,
FileMode.Open,
FileAccess.Read);
FileStream fsEncrypted = new FileStream(sOutputFilename,
FileMode.Create,
FileAccess.Write);
Menyatakan contoh DESCryptoServiceProvider kelas. Ini mewakili enkripsi sebenarnya dan sebenarnya
dekripsi teknologi yang digunakan pada file. Pada titik ini, Anda dapat membuat
penyedia berbeda jika Anda memilih untuk menggunakan RSAsecutiry atau lain kriptografi
teknik.
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
Penyedia kriptografi harus disediakan dengan Anda
kunci rahasia sebagai array byte. The System.text namespace menyediakan fungsi yang bernama GetBytes(). Sebagai bagian dari fitur encoding, GetBytes() fungsi mengambil tali, dan kemudian mengembalikan array byte. The
ukuran tombol berbeda untuk setiap teknik kriptografi. Sebagai contoh,
Data Encryption Standard (DES) mengambil 64-bit kunci yang sama dengan 8 byte atau
untuk 8 karakter.
Jika Anda tidak memberikan kunci, penyedia secara acak
menghasilkan satu. Ini berhasil mengenkripsi file, tetapi ada cara untuk
mendekripsi berkas. Catatan bahwa Anda juga harus memberikan vektor inisialisasi
(IV). nilai ini digunakan sebagai bagian dari enkripsi. Seperti tombol, IV adalah
acak yang dihasilkan jika Anda tidak memberikan nilai. Karena nilai-nilai harus
yang sama untuk enkripsi dan dekripsi, Anda harus mengizinkan acak
generasi dari nilai-nilai ini.
Membuat sebuah instance dari CryptoStream kelas dengan menggunakan penyedia kriptografi untuk mendapatkan enkripsi
objek)CreateEncryptor) dan output ada FileStream objek sebagai bagian dari konstruktor.
Membaca di input file, dan kemudian menulis output
file. Melewati CryptoStream objek di mana file telah dienkripsi dengan menggunakan tombol yang Anda
disediakan.
Menciptakan metode, dan kemudian nama ituDecryptFile. Proses dekripsi mirip
proses enkripsi, namun, DecryptFile prosedur memiliki dua perbedaan utama dari EncryptFile prosedur.
CreateDecryptor digunakan sebagai pengganti CreateEncryptor untuk membuat CryptoStream objek, yang menentukan cara objek dapat digunakan.
Ketika teks didekripsi ditulis ke tujuan
file, CryptoStream objek sekarang adalah sumber bukan tujuan
streaming.
static void DecryptFile(string sInputFilename,
string sOutputFilename,
string sKey)
{
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
//A 64 bit key and IV is required for this provider.
//Set secret key For DES algorithm.
DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
//Set initialization vector.
DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
//Create a file stream to read the encrypted file back.
FileStream fsread = new FileStream(sInputFilename,
FileMode.Open,
FileAccess.Read);
//Create a DES decryptor from the DES instance.
ICryptoTransform desdecrypt = DES.CreateDecryptor();
//Create crypto stream set to read and do a
//DES decryption transform on incoming bytes.
CryptoStream cryptostreamDecr = new CryptoStream(fsread,
desdecrypt,
CryptoStreamMode.Read);
//Print the contents of the decrypted file.
StreamWriter fsDecrypted = new StreamWriter(sOutputFilename);
fsDecrypted.Write(new StreamReader(cryptostreamDecr).ReadToEnd());
fsDecrypted.Flush();
fsDecrypted.Close();
}
Tambahkan baris berikut ke Main() prosedur untuk memanggil kedua EncryptFile dan DecryptFile:
static void Main()
{
// Must be 64 bits, 8 bytes.
// Distribute this key to the user who will decrypt this file.
string sSecretKey;
// Get the key for the file to encrypt.
sSecretKey = GenerateKey();
// For additional security pin the key.
GCHandle gch = GCHandle.Alloc( sSecretKey,GCHandleType.Pinned );
// Encrypt the file.
EncryptFile(@"C:\MyData.txt",
@"C:\Encrypted.txt",
sSecretKey);
// Decrypt the file.
DecryptFile(@"C:\Encrypted.txt",
@"C:\Decrypted.txt",
sSecretKey);
// Remove the key from memory.
ZeroMemory(gch.AddrOfPinnedObject(), sSecretKey.Length * 2);
gch.Free();
}
Simpan berkas tersebut. Menjalankan aplikasi Anda. Pastikan bahwa
jalan yang digunakan untuk nama input file poin untuk yang sudah ada
file.
Menguji prosedur
Menguji kode ini dengan file teks (.txt) untuk mengkonfirmasi bahwa kode
dienkripsi dan didekripsi file dengan benar. Pastikan bahwa Anda mendekripsi berkas
untuk file baru (seperti dalam Main() prosedur dalam artikel ini) bukan ke file asli.
Memeriksa dekripsi file, dan kemudian membandingkannya dengan file asli.
using System;
using System.IO;
using System.Security;
using System.Security.Cryptography;
using System.Runtime.InteropServices;
using System.Text;
namespace CSEncryptDecrypt
{
class Class1
{
// Call this function to remove the key from memory after use for security
[System.Runtime.InteropServices.DllImport("KERNEL32.DLL", EntryPoint="RtlZeroMemory")]
public static extern bool ZeroMemory(IntPtr Destination, int Length);
// Function to Generate a 64 bits Key.
static string GenerateKey()
{
// Create an instance of Symetric Algorithm. Key and IV is generated automatically.
DESCryptoServiceProvider desCrypto =(DESCryptoServiceProvider)DESCryptoServiceProvider.Create();
// Use the Automatically generated key for Encryption.
return ASCIIEncoding.ASCII.GetString(desCrypto.Key);
}
static void EncryptFile(string sInputFilename,
string sOutputFilename,
string sKey)
{
FileStream fsInput = new FileStream(sInputFilename,
FileMode.Open,
FileAccess.Read);
FileStream fsEncrypted = new FileStream(sOutputFilename,
FileMode.Create,
FileAccess.Write);
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
ICryptoTransform desencrypt = DES.CreateEncryptor();
CryptoStream cryptostream = new CryptoStream(fsEncrypted,
desencrypt,
CryptoStreamMode.Write);
byte[] bytearrayinput = new byte[fsInput.Length];
fsInput.Read(bytearrayinput, 0, bytearrayinput.Length);
cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length);
cryptostream.Close();
fsInput.Close();
fsEncrypted.Close();
}
static void DecryptFile(string sInputFilename,
string sOutputFilename,
string sKey)
{
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
//A 64 bit key and IV is required for this provider.
//Set secret key For DES algorithm.
DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
//Set initialization vector.
DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
//Create a file stream to read the encrypted file back.
FileStream fsread = new FileStream(sInputFilename,
FileMode.Open,
FileAccess.Read);
//Create a DES decryptor from the DES instance.
ICryptoTransform desdecrypt = DES.CreateDecryptor();
//Create crypto stream set to read and do a
//DES decryption transform on incoming bytes.
CryptoStream cryptostreamDecr = new CryptoStream(fsread,
desdecrypt,
CryptoStreamMode.Read);
//Print the contents of the decrypted file.
StreamWriter fsDecrypted = new StreamWriter(sOutputFilename);
fsDecrypted.Write(new StreamReader(cryptostreamDecr).ReadToEnd());
fsDecrypted.Flush();
fsDecrypted.Close();
}
static void Main()
{
// Must be 64 bits, 8 bytes.
// Distribute this key to the user who will decrypt this file.
string sSecretKey;
// Get the Key for the file to Encrypt.
sSecretKey = GenerateKey();
// For additional security Pin the key.
GCHandle gch = GCHandle.Alloc( sSecretKey,GCHandleType.Pinned );
// Encrypt the file.
EncryptFile(@"C:\MyData.txt",
@"C:\Encrypted.txt",
sSecretKey);
// Decrypt the file.
DecryptFile(@"C:\Encrypted.txt",
@"C:\Decrypted.txt",
sSecretKey);
// Remove the Key from memory.
ZeroMemory(gch.AddrOfPinnedObject(), sSecretKey.Length * 2);
gch.Free();
}
}
}
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:307010
(http://support.microsoft.com/kb/307010/en-us/
)
Mondja el, hogy miért, és tudassa velünk, miként tudnánk javítani az információ min?ségén
Köszönjük! Ez az információ segítséget nyújt számunkra, hogy fejlesszük a támogatási tartalmat. További támogatási lehet?ségekért keresse fel a következ? webhelyet: Súgó és támogatási webhely.