Cách tạo ra hàm Encrypt dựa trên đoạn code bên dưới?

Các anh chị đi qua giúp em với . mà cái mảng này em mới học nên ngu chưa biết gì, Sếp cho em một hàm như này. Và làm hàm Encrypt còn lại .Có mẫu thử và kết quả ở dưới. Chi tiết câu hỏi bên dưới ạ. Cám ơn anh chị.

public string Decrypt(string chuoimahoa, string khoa)
{
    string result = "";
    try
    {
        RijndaelManaged aes = new RijndaelManaged();
        aes.KeySize = 256;
        aes.BlockSize = 128;
        aes.Padding = PaddingMode.PKCS7;
        aes.Mode = CipherMode.CBC;
        aes.Key = Convert.FromBase64String(khoa);
        byte[] bytes = Convert.FromBase64String(chuoimahoa);
        Dictionary<string, string> dictionary = JsonConvert.DeserializeObject<Dictionary<string, string>>(Encoding.UTF8.GetString(bytes));
        aes.IV = Convert.FromBase64String(dictionary["iv"]);
        if (HmacSHA256(dictionary["iv"] + dictionary["value"], aes.Key) != dictionary["mac"])
        {
            return "";
        }
        ICryptoTransform cryptoTransform = aes.CreateDecryptor(aes.Key, aes.IV);
        byte[] array = Convert.FromBase64String(dictionary["value"]);
        byte[] array2 = cryptoTransform.TransformFinalBlock(array, 0, array.Length);
        string[] array3 = Encoding.UTF8.GetString(array2, 0, array2.Length).Split('.');
        if (array3.Length == 3)
        {
            return array3[1];
        }
        return result;
    }
    catch (Exception)
    {
        return "";
    }
}

private string HmacSHA256(string data, byte[] key)
{
    HMACSHA256 hMACSHA = new HMACSHA256(key);
    return BitConverter.ToString(hMACSHA.ComputeHash(Encoding.UTF8.GetBytes(data))).Replace("-", "").ToLower();
}
        
string chuoimahoa = "eyJpdiI6IlA4dlJpaXJ0aFlDeXZOdWdZcGFodmc9PSIsInZhbHVlIjoiZm03dGZiMXNYcFFhT1JQTXFLZENXQUd5bmROSTV3MEFsTEpwRkhmT2RSVFwvWTQ0NTR6bWt3cVFXTnJsTGVMS3AiLCJtYWMiOiI0NWNjZjNhZWEzYmIzZGQ2ZDA2ZjE5ZTk1NzI0ZmMyZDU4ZDI2MjI1MDdjMmE1MWJiZjlkYjFkNWNiMjA4NzAwIn0=";
string khoa = "omZCF+K4xZnye1vuBZ7K03k+Gx3D6tn1EZabRTCSzJU=";
string stext = "18198000501212";
string result =  Decrypt(chuoimahoa, khoa);

      //kết quả result là "18198000501212"
      //giờ làm sao tạo hàm Encrypt ngược  từ khoa và stext cho ra chuoimahoa lại

Và cho luôn kết quả và mẫu thử giờ viết hàm Encrypt dịch ngược lại. Giờ em chỉ tạo lại cái đoạn chuoimahoa này lại. Chứ em không dịch ngược lại, tạo mới thôi mà nó có kết quả giống cái chuoimahoa trên ,
Anh chị thương em giúp em với. Cám ơn anh chị nhiều.

bạn đã thử đọc hiểu hàm decrypt chưa
nếu chưa hiểu thì bạn đã thử google chưa?

4 Likes

Thuật toán mã hóa là một thuật toán nhằm mã hóa thông tin của chúng ta, biến đổi thông tin từ dạng rõ sang dạng mờ, để ngăn cản việc đọc trộm nội dung của thông tin.

Encode có thể hiểu đơn giản là quá trình chuyển đổi dữ liệu từ dạng này sang dạng khác, ví dụ như từ số thập lục phân sang số thập phân, từ kí tự ASCII thành số,… Decode ngược lại với encode.

Hashing (băm) là quá trình biến đầu vào là một nội dung có kích thước, độ dài bất kỳ rồi sử dụng những thuật toán, công thức toán học để biến thành đầu ra tiêu chuẩn có độ dài nhất định và tương ứng với nội dung ban đầu. Quá trình đó sử dụng những Hàm băm (Hash function).
Ví dụ, giả sử ta có A là chuỗi gì đó, hash lại bằng hàm băm MD5 được a, giả sử ta gửi a cho một người nào đó. Người đó có một chuỗi gọi là B, nếu người đó muốn biết B có bằng A không thì cần phải băm B bằng MD5, tạo ra chuỗi b. Nếu a = b thì A = B.


Đoạn code trên dùng một thuật toán mã hóa gọi là AES-256-CBC, thuật toán này mã hóa thông tin bằng một thứ gọi là khóa bí mật và tạo ra một chuỗi ngẫu nhiên gọi là IV. Muốn giải mã thông tin thì cần phải có hai thứ trên.

Trong code, chuoimahoa thực chất là một chuỗi đã encode sang base64, nội dung là một chuỗi JSON (lưu ý nội dung đã được chỉnh sửa một chút):

{
"iv":"P8vRiirthYCyvNugYpahvg==",
//IV ở dạng base64
"value":"fm7tfb1sXpQaORPMqKdCWAGyndNI5w0AlLJpFHfOdRT\/Y4454zmkwqQWNrlLeLKp",
//chuỗi đã được mã hóa
"mac":"45ccf3aea3bb3dd6d06f19e95724fc2d58d2622507c2a51bbf9db1d5cb208700"
//Mã hash của IV gốc + chuỗi đã được mã hóa, dùng hàm băm HmacSHA256 với key là khóa bí mật.
}

Có thể dùng biến aes trong hàm Decrypt để làm hàm Encrypt, cụ thể là copy đoạn này:

RijndaelManaged aes = new RijndaelManaged();
aes.KeySize = 256;
aes.BlockSize = 128;
aes.Padding = PaddingMode.PKCS7;
aes.Mode = CipherMode.CBC;
aes.Key = Convert.FromBase64String(khoa);

Phương thức tạo IV và trình mã hóa:

7 Likes

Mình tạo ra chuổi chuoimahoa dựa trên hàm Decrypt và key, đoạn test , mình làm như bạn hướng dẫn trên thì hàm Decrypt của mình không giải được,
Bạn cho mình cái hàm Encrypt được không bạn, hàm Encrypt tạo ra được chuỗi chuoimahoa, sau đó hàm Decrypt của mình phải đọc được chuổi này, Chứ không tạo mới hàm Decrypt này nữa, mình khổ với cái này 2 ngày rồi bạn ơi,Viết ra nó giải trật suốt. bạn giúp mình với. bayquamainha gmal com của mình đây bạn. Cám ơn bạn rất nhiều. Mong nhận được hồi âm của bạn.

Đầu tiên, code mà bạn làm đâu? Bạn encode kết quả lại thành base64 chưa? Có lỗi gì trả về khi dùng hàm Decrypt không? (In lỗi ra)

5 Likes

Chào bạn ngày mới, mình làm thì không có lỗi gì nhưng nó chạy ra kết quả sai bạn ơi, và hàm Decrypt của mình nó chạy không hết kết quả được. Mình xin gửi bạn source code của mình , Bạn giúp mình với. CÁM ƠN BẠN NHIỀU.
Encrypt and Decrypt

Thanh niên kia tự xử đi nhé. Mấy ông Gà, Rồng, Lười Biếng, Library,… đều chạy độ hết rồi. Họ rợn tóc gáy… tới già với cái đoạn mã hóa này rồi.

Túm lại là mấy bác kia chớ trả lời hộ em nó, tớ mới Google một phát là ra ngay, để em ấy tự mò.

5 Likes

Giải ra từ mấy ngày trước rồi, mà thôi cứ để em nó tự mò cho vui. Trong lúc Google thì vô tình phát hiện ra code mẫu, đối chiếu lại thì phát hiện gần như nguyên xi đoạn code trên, chỉ chỉnh sửa tên biến với thêm thắt một tí.

Mà giờ nghĩ lại thì thấy có gì đó…sai sai. Nếu thớt đúng là “mới học lập trình” thật thì tại sao lại đưa cho cái đề trông chẳng giống dành cho người “mới học”? Rèn luyện kĩ năng search Google chăng?

4 Likes

Bác là ác nhất room rồi đó. ai chơi vậy, em ngu cực độ mới lên đây cầu cứu. Lĩnh vực này chỉ có vài ngày tìm hiểu mà sao bì được các bác ở đây. chứ lỉnh vực ERP của em trên 10 năm kiếm cơm rồi thì các bác làm sao so với em bác à. Bác thương em thì giúp em 1 tay hỗ trợ sau này có gì hay em mang ơn nhớ tới bác thôi, chứ ai lại xúi các bác kia chê. hắc hủi em. Ai giúp em thì em củng quý hết. :grin:

Đơn giản lắm, copy hết toàn bộ code của hàm Decrypt rồi tìm trên Google, vào trang nào có địa chỉ gist.github.com.

2 Likes

Bạn nghe lời xàm tấu ở trên mà bỏ mình sao được bạn ơi. tương lai của mình vào đây cả . chứ mình củng google nhiều rồi nhưng không tìm ra. mình ngu cái này đến cái từ khóa còn không biết từ nào phù hợp. bạn giúp mình với. Bạn thấy sai sai củng đúng vì thật ra mình không code trong lĩnh vực này, mình thì chuyên nhận code ERP cho các doanh nghiệp thôi, củng trên 10 năm, mà code VB.net . còn cái kia là sếp đưa , khổ mấy ngày nay chưa trả lời gì với ông sếp. deadline nhiều project dí quá, bạn giúp mình 1 tay với. bạn pro bỏ ít thời gian giúp mình với. Cám ơn bạn nhiều.

10 years ERP, thi conduct Hana với mình hem?à mà giỡn thôi, thấy guy tội nghiệp quá cho nè:

4 Likes

Cám ơn bạn, nhưng nó sai với yêu cầu rồi bạn ơi. Bạn làm phiên bản Hana, SAP thì mình củng làm nhưng ít mình thật sự không ưa nó lắm, nói thật nó củ chuối quá. Mình viết cái mà SAP không support được cho doanh nghiệp.

Ok it’s fine my friend, keep going.

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?