Có lẽ tôi chưa rõ câu hỏi của bạn hoặc nó quá basic,vì chỉ cần update kiến thức về 1 trong các + sau:
+ Truy xuất DB căn bản
+ Truy xuất file căn bản
+ Truy xuất registry căn bản
Là giải quyết đc yêu cầu của bạn.
Mình đang lập trình C# trên nền VS 2500 mà đang gặp vấn đề về việc tạo password chương trình .Đó là Mình muốn tạo pasword cho chương trình của mình, sau đó lưu nó lại trong csdl rồi chạy setup cài đặt vào máy (hdh Win XP) tiếp đó chạy chương trình nhập pasword cho lần đầu tiên rồi những lần sau đó không cần đăng nhập nữa.
Hiện tại mình không biết viết thế nào.Mong được sự giúp đỡ của mọi người ,mình cảm ơn nhiều lắm.
--------------------------------------------------
Đề nghị đọc rule của box Project trước khi post bài ! nhc1987.
Đã được chỉnh sửa lần cuối bởi nhc1987 : 10-12-2007 lúc 05:55 PM.
Có lẽ tôi chưa rõ câu hỏi của bạn hoặc nó quá basic,vì chỉ cần update kiến thức về 1 trong các + sau:
+ Truy xuất DB căn bản
+ Truy xuất file căn bản
+ Truy xuất registry căn bản
Là giải quyết đc yêu cầu của bạn.
Cảm ơn Pham Tien Sinh.nhưng mình mún hỏi là khi tạo 1 password cho chương trình xong thì làm thế nào để lưu nó lại mà khi ta đăng nhập sử dụng chỉ lần đầu tiên thui.những lần khác lấy đó mà chạy không cần phải nhập pass nữa. Bạn có thể nói rõ hơn được ko hay nếu có tài liệu nào thì send cho mình với.
Câu trả lời của phamtiensinh rõ ràng vậy mà
Nếu là tui thì tui chọn lưu trong file (tất nhiên là sau khi RSA-128+ Truy xuất DB căn bản
+ Truy xuất file căn bản
+ Truy xuất registry căn bản)
Keep moving forward!
... Retired ...
Thường những yêu cầu như bạn nói thì pass được lưu xuống file. Và tốt nhất bạn nên lưu dưới file text. Chương trình của bạn khởi động nó sẽ gọi file "có lưu pass không?" lên để kiểm tra, nếu lưu thì nó gọi file "user và pass" lên để đăng nhập đúng với quyền truy cập. File text bạn tạo ra đuôi có thể là .txt, .doc hay bất kỳ tùy bạn đặt ví dụ LOGIN.sunflower chẳng hạn.
Trong lúc sử dụng bạn không muốn ghi nhớ nữa thì bạn thực hiện logout hoặc cơ chế nào đó để xóa file lưu pass này. Và nhớ là đổi luôn cái kiểm tra lưu pass là không lưu để lần sau khi chương trình khởi động nó đòi bạn nhập user và pass.
Như PTS chỉ cho bạn đó, cần tìm hiểu những cái như vậy. Nhưng với yêu cầu của bạn chỉ cần tìm hiểu file là đủ. như (FileStream, Stream, StreamWrite, StreamReader ...) vào MSDN gỏ từ khóa nó ra hàng đóng source và ex,
Gác Kiếm
Một số hiểu biết về mã hóa, sử dụng trong .NET
Trong các thuật toán mã hóa đối xứng, thì thường dùng một private key (khóa riêng) để mã hóa và giải mã dữ liệu.
Cùng với private key thì để tăng độ bảo mật, 1 Initialization Vector (IV) được dùng như một giá trị seed (cái này có thể hiểu như là lõi).
Như vậy, có thể hiểu được rằng khi cài đặt mã hóa trong .NET thì nên dùng 2 field là: private key và IV.
Okei, bây giờ ta qua tiếp phần cách thức sử dụng nó như thế nào. Nhưng trước hết phải làm quen với mô hình mã hóa có thể dùng trong .NET
Ở .NET, có thể hình dung được mô hình như sau
Như trong mô hình trên thì đầu vào sẽ là dữ liệu text, được đưa vào CryptoStream, thực hiện mã hóa trong đó và ghi xuống underlaying Stream (như FileStream, MemoryStream ...). Sau đó thì lưu chúng vào File.Code:------------------- ----------------------- | Dữ liệu text | | Dữ liệu text | --------------------- ----------------------- | ^ V | ----------------------- ----------------------- | CryptoStream | | CryptoStream | ----------------------- ----------------------- | ^ V | ----------------------- ------------------- ----------------------- | Underlaying Streams |--------> | Encrypted File |------> | Underlaying Streams | ----------------------- ------------------- ----------------------- (FileStream, memoryStream ...) (FileStream, memoryStream ...)
Theo như bài của bạn thì theo mình nghĩ chỉ cần lưu vào trong 1 file đặt tên là login.dat là được (đại loại là thế). Còn việc kiểm tra login lần đầu hay không thì đặt cho nó 1 cái cờ trong File, xác định là đã login lần nào hay chưa? nếu chưa thì login, và bật cờ lên. Lưu thông tin đó lại vào File.
Trưa nay rảnh nếu bạn cần tôi sẽ post cái code tôi đã từng làm cho bạn tham khảo.
Đã được chỉnh sửa lần cuối bởi hung.tran : 11-12-2007 lúc 08:24 AM.
Code tham khảo. Mình gõ trong Notepadd++ nên chú thích không có gõ dấu được, thông cảmPHP Code:using System;
using System.Collections.Generic;
using System.Text;
using System.IO; // Dung cho File
using System.Security.Cryptography; // Dung cho ma hoa
namespace Mahoa
{
class Cryption
{
public static string DefaultKey = "Ma1@hOa5"; // Khoa mac dinh, cai nay tuy ban dat nhu the nao cung dc
public static byte[] salt = new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 }; // Dùng fuc vu cho ma hoa
// ----------------------------Cac ham ma hoa---------------------------------
public static byte[] Encrypt(byte[] clearData, byte[] Key, byte[] IV)
{
// Ma hoa dung thuat toan Rijndael duoc cai dat san trong .NET
MemoryStream ms = new MemoryStream(); // Tao memorystream de chua du lieu duoc ma hoa
Rijndael oRijndael = Rijndael.Create(); // Tao mot instance cua thuat toan Rijndael
oRijndael.Key = Key;
oRijndael.IV = IV;
// Thuc hien ma hoa, ghi vao memorystream
CryptoStream cs = new CryptoStream(ms, oRijndael.CreateEncryptor(), CryptoStreamMode.Write);
// Ghi ra chuoi Byte
cs.Write(clearData, 0, clearData.Length);
cs.Close();
byte[] encryptedData = ms.ToArray();
return encryptedData;
}
// Thuc hien ma hoa chuoi string dua vao va tra ve 1 chuoi string
public static string Encrypt(string clearText)
{
// Chuyen chuoi string ra cac byte
byte[] clearBytes = System.Text.Encoding.Unicode.GetBytes(clearText);
//Tao key
PasswordDeriveBytes pdb = new PasswordDeriveBytes(DefaultKey, salt);
// Thuc hien ma hoa, dung ham ma hoa cac bye tra ve cac byte da lam o tren
byte[] encryptedData = Encrypt(clearBytes, pdb.GetBytes(32), pdb.GetBytes(16));
// Chuyen ve dang string, luc nay khoi doc duoc roi
return Convert.ToBase64String(encryptedData);
}
//Ma hoa chuoi pass vao File
public static void Encrypt(string fileOut, string password)
{
// Chuyen ra dang byte
byte[] clearBytes = System.Text.Encoding.Unicode.GetBytes(password);
//Tao Filestream de chua du lieu dc ma hoa
FileStream fsOut = new FileStream(fileOut, FileMode.Create, FileAccess.Write);
// Tao key
PasswordDeriveBytes pdb = new PasswordDeriveBytes(DefaultKey, salt);
Rijndael oRij = Rijndael.Create();
oRij.Key = pdb.GetBytes(32);
oRij.IV = pdb.GetBytes(16);
// Vua thuc hien ma hoa, vua ghi vao File
CryptoStream cs = new CryptoStream(fsOut, oRij.CreateEncryptor(), CryptoStreamMode.Write);
cs.Write(clearBytes, 0, clearBytes.Length);
cs.Close();
fsOut.Close();
}
// ----------------------------Giai ma---------------------------------
public static byte[] Decrypt(byte[] cipherData, byte[] Key, byte[] IV)
{
MemoryStream ms = new MemoryStream();
Rijndael oRij = Rijndael.Create();
oRij.Key = Key;
oRij.IV = IV;
CryptoStream cs = new CryptoStream(ms, oRij.CreateDecryptor(), CryptoStreamMode.Write);
cs.Write(cipherData, 0, cipherData.Length);
cs.Close();
byte[] decryptedData = ms.ToArray();
return decryptedData;
}
public static byte[] Decrypt(byte[] cipherData, string Password)
{
PasswordDeriveBytes pdb = new PasswordDeriveBytes(Password, salt);
return Decrypt(cipherData, pdb.GetBytes(32), pdb.GetBytes(16));
}
//Giai ma tu File
public static string Decrypt(string fileIn)
{
string data = "";
FileStream fsIn = new FileStream(fileIn, FileMode.Open, FileAccess.Read);
long filelenght = fsIn.Length;
byte[] buffer = new byte[filelenght];
int byteread;
// Doc du lieu tu File
do
{
byteread = fsIn.Read(buffer, 0, buffer.Length);
} while (byteread != 0);
fsIn.Close();// Lam xong thi dong File
// Thuc hien giai ma dong byte vua doc tu File ra
byte[] ciphertext = Decrypt(buffer, DefaultKey);
data = System.Text.Encoding.Unicode.GetString(ciphertext);// Chuyen nguoc ve lai unicode
return data;
}
}
}
Đã được chỉnh sửa lần cuối bởi hung.tran : 11-12-2007 lúc 09:55 AM. Lý do: Đổi title
Cho mình hỏi, nếu Password mình mã hóa xong và lưu dưới dạng *.txt hay định dạng nào khác, nhưng lỡ người ta mún phá CSDL pass của mình, người ta mở file này lên và thay đổi thông số nó đi thì làm thế nào ạh? có cách nào lưu CSDL về pass vào 1 chỗ nào ko ai sờ đến đc ko ?
Mình mới ngâm cứu C#, chưa thông lắm, các pác giúp hộ ^^.
Nên lưu với định dạng "lạ mắt" một chútvà lưu dưới dạng *.txt hay định dạng nào khác,. Tránh tò mò ấy mà.
Thì lúc load lên, check file thấy bị hư thì bỏ qua. Yêu cầu nhập user + pass. Xong rồi lưu lại.ta mún phá CSDL pass của mình, người ta mở file này lên và thay đổi thông số nó đi thì làm thế nào ạh?
Nếu lưu chỗ người ta không sờ đến được thì kiếm chỗ nào kín kín mà lưu. System32 chẳng hạn. Set thêm hidden nữacó cách nào lưu CSDL về pass vào 1 chỗ nào ko ai sờ đến đc ko ?
Keep moving forward!
... Retired ...