thắc mắc Thắc mắc về cách mã hoá chuỗi chứa thông tin

Ví dụ một người có thông tin là tên, tuổi, quê là: Nam, 31, Vĩnh Phúc. Thì mình muốn mã hoá cái chuỗi kiểu như Nam31VinhPhuc thành một mã ký tự bí mật và gần như là duy nhất. Về sau có thể decode cái ký tự bí mật đó ra thành Nam, 31, Vĩnh Phúc thì làm cách nào để tránh bị lộ dữ liệu hay làm giả vậy?


ps: à quên, đăng xong lại nhớ ra là có cái bcrypt hay dùng cho password, chắc dùng cái ý cũng được nhỉ mn
 
Last edited:
Ví dụ một người có thông tin là tên, tuổi, quê là: Nam, 31, Vĩnh Phúc. Thì mình muốn mã hoá cái chuỗi kiểu như Nam31VinhPhuc thành một mã ký tự bí mật và gần như là duy nhất. Về sau có thể decode cái ký tự bí mật đó ra thành Nam, 31, Vĩnh Phúc thì làm cách nào để tránh bị lộ dữ liệu hay làm giả vậy?


ps: à quên, đăng xong lại nhớ ra là có cái bcrypt hay dùng cho password, chắc dùng cái ý cũng được nhỉ mn
Dùng bcrypt tránh làm giả thì được, chứ làm sao decode được.
 
AES + ECDSA
1568365758754.jpg
 
Tuỳ vào tính chất công việc, nếu thông tin phải mã hoá giải mã liên tục với số lượng lớn thì dùng AES sẽ hơi tốn sức, nếu không phải chuyển khoá thì cũng không cần tới khoá public , tìm loại mã hoá khác cho rẻ. Nếu chỉ để lưu trữ thông thường thì cứ Aes khoá dài độ 1024

via theNEXTvoz for iPhone
 
Blowfish, des, aes, twofish,... Tất cả đều có thư viện, rất dễ sài.
Tui cài cái Blowfish bằng Nuget management trên C# thì viết code thế này:

C#:
using Elskom.Generic.Libs;

BlowFish algo = new BlowFish("secrect_key");

string needEncrypt = hoten + "-" + tuoi + "-" + quequan;
string encrypted = algo.EncryptECB(needEncrypt);
Console.WriteLine(encrypted);
string decrypted = algo.DecryptECB(encrypted);
Console.WriteLine(decrypted);

Thì ví dụ mà gặp trường hợp tên có dấu "Trần Văn Nam" thì mã hoá chuỗi:
"Trần Văn Nam-31-Nam Định" mã hoá sang "123u0121239821801e220e...."
xong in giá trị decode ra nó lại mất dấu luôn, thành:
"Tr?n V?n Nam-31-Nam D?nh"
 
Dùng RSA đi. cho public key mã hoá còn giải mã thì dùng private key.
Muốn tránh bị làm giả thì thêm mã băm của chuỗi mã hoá trên rồi mã hoá bởi private key (dùng public key có thể giải mã ngược lại - kiểu chữ kí số)
 
Tui cài cái Blowfish bằng Nuget management trên C# thì viết code thế này:

C#:
using Elskom.Generic.Libs;

BlowFish algo = new BlowFish("secrect_key");

string needEncrypt = hoten + "-" + tuoi + "-" + quequan;
string encrypted = algo.EncryptECB(needEncrypt);
Console.WriteLine(encrypted);
string decrypted = algo.DecryptECB(encrypted);
Console.WriteLine(decrypted);

Thì ví dụ mà gặp trường hợp tên có dấu "Trần Văn Nam" thì mã hoá chuỗi:
"Trần Văn Nam-31-Nam Định" mã hoá sang "123u0121239821801e220e...."
xong in giá trị decode ra nó lại mất dấu luôn, thành:
"Tr?n V?n Nam-31-Nam D?nh"
Set console output sang utf8 mới hiển thị có dấu được
 
Set console output sang utf8 mới hiển thị có dấu được
C#:
using Elskom.Generic.Libs;

BlowFish algo = new BlowFish("secrect_key");

Console.OutputEncoding = Endcoding.UTF8;
Console.WriteLine("Viết tiếng Việt có dấu!");

string needEncrypt = hoten + "-" + tuoi + "-" + quequan;
string encrypted = algo.EncryptECB(needEncrypt);
Console.WriteLine(encrypted);
string decrypted = algo.DecryptECB(encrypted);
Console.WriteLine(decrypted);

Thêm 2 dòng 5,6 vào test thì chỉ có cái Viết tiếng Việt có dấu là hiện ra chuẩn, còn lại chỗ được decode vẫn là ko dấu, chắc vấn đề ở chỗ decode rồi @@
 
Tui cài cái Blowfish bằng Nuget management trên C# thì viết code thế này:

C#:
using Elskom.Generic.Libs;

BlowFish algo = new BlowFish("secrect_key");

string needEncrypt = hoten + "-" + tuoi + "-" + quequan;
string encrypted = algo.EncryptECB(needEncrypt);
Console.WriteLine(encrypted);
string decrypted = algo.DecryptECB(encrypted);
Console.WriteLine(decrypted);

Thì ví dụ mà gặp trường hợp tên có dấu "Trần Văn Nam" thì mã hoá chuỗi:
"Trần Văn Nam-31-Nam Định" mã hoá sang "123u0121239821801e220e...."
xong in giá trị decode ra nó lại mất dấu luôn, thành:
"Tr?n V?n Nam-31-Nam D?nh"

Thư viện bfowfish này hình như nó ko support unicode. Nên phải chuyển thành byte[] mới chạy đúng.

C#:
BlowFish algo = new BlowFish("secrect_key");
string needEncrypt = "Trần Văn Nam" + "-" + "31" + "-" + "Nam Định";
byte[] encrypteBytes = algo.EncryptECB(Encoding.UTF8.GetBytes(needEncrypt));
string encrypted = Convert.ToBase64String(encrypteBytes);
Console.WriteLine(encrypted);

byte[] decBytes = algo.Decrypt(Convert.FromBase64String(encrypted), CipherMode.ECB);
string decrypted = Encoding.UTF8.GetString(decBytes);
Console.WriteLine(decrypted);
 
Thư viện bfowfish này hình như nó ko support unicode. Nên phải chuyển thành byte[] mới chạy đúng.

C#:
BlowFish algo = new BlowFish("secrect_key");
string needEncrypt = "Trần Văn Nam" + "-" + "31" + "-" + "Nam Định";
byte[] encrypteBytes = algo.EncryptECB(Encoding.UTF8.GetBytes(needEncrypt));
string encrypted = Convert.ToBase64String(encrypteBytes);
Console.WriteLine(encrypted);

byte[] decBytes = algo.Decrypt(Convert.FromBase64String(encrypted), CipherMode.ECB);
string decrypted = Encoding.UTF8.GetString(decBytes);
Console.WriteLine(decrypted);
hay quá, thanks fen nha
 
Ví dụ một người có thông tin là tên, tuổi, quê là: Nam, 31, Vĩnh Phúc. Thì mình muốn mã hoá cái chuỗi kiểu như Nam31VinhPhuc thành một mã ký tự bí mật và gần như là duy nhất. Về sau có thể decode cái ký tự bí mật đó ra thành Nam, 31, Vĩnh Phúc thì làm cách nào để tránh bị lộ dữ liệu hay làm giả vậy?


ps: à quên, đăng xong lại nhớ ra là có cái bcrypt hay dùng cho password, chắc dùng cái ý cũng được nhỉ mn
Mã hoá id nữa.
 
Ví dụ một người có thông tin là tên, tuổi, quê là: Nam, 31, Vĩnh Phúc. Thì mình muốn mã hoá cái chuỗi kiểu như Nam31VinhPhuc thành một mã ký tự bí mật và gần như là duy nhất. Về sau có thể decode cái ký tự bí mật đó ra thành Nam, 31, Vĩnh Phúc thì làm cách nào để tránh bị lộ dữ liệu hay làm giả vậy?


ps: à quên, đăng xong lại nhớ ra là có cái bcrypt hay dùng cho password, chắc dùng cái ý cũng được nhỉ mn
Mã hoá thì tự định nghĩa cũng đc mà, căn bản là 2 khái niệm: Thuật toán và Khoá.

Cần éo gì tool, cách đây mấy ngàn năm là người ta đã mã hoá thông tin để gởi đi rồi. :LOL:
 
Back
Top