Trang 2 / 2 FirstFirst 12
Hiển thị kết quả từ 11 đến 19 / 19
  1. #11
    Tham gia
    03-03-2006
    Bài viết
    68
    Like
    0
    Thanked 0 Times in 0 Posts
    Quote Được gửi bởi rass_it
    các huynh ơi nếu dùng như thế thì nó chỉ mã hóa thàng dạng số và chữ như kiểu hecxa ...như vậy 'cao thủ ' thì giải mã sẽ xong ngay ...có cách nào mã hóa thành loại mã mình nhìn vào kg thể hiểu và cũng như làm 'pó tay ' những người có ý định tìm hiểu và giãi mã các pw này...mình có xem một pw đã bị mã hóa như sau 1 --> chữ bêta(kí hiệu trong toán học tựa như anpha) và nó còn có thêm chữ như 3/4 (rất nhỏ)..v.v...
    nói vậy là sai rồi, mã hóa MD5 là "có đi không có lại", tức là chỉ có mã hóa thôi, không dịch lại được. Còn cryptography thì có thể dịch ngược lại được, và các kí tự rất lằng nhằng, tuy nhiên muốn dịch ngược lại cần phải cung cấp valid secret key & vector ...

    Nếu đã mã hóa mấy dạng trên rồi thì không phải là "cao thủ" cứ bỏ thời gian ra là giải mã được đâu à nha !!! Chỉ có cách tạm thời là giải mà kiểu brute force, tạo một password dictionary trước rồi giải mã từng password key trong dictionary đấy compare với password đã mã hóa xem có giống hay không thôi .... !

  2. #12
    Tham gia
    15-05-2006
    Bài viết
    10
    Like
    0
    Thanked 0 Times in 0 Posts
    Các huynh ơi
    Sao em đặt cái code như ở trên vào VB.net mà mỗi lần cho mã hóa nó lại ra một chuỗi khác nhau các huynh ạ. Các huynh chỉ cho em sửa với, nếu mà mỗi lần mã hóa khác nhau như thế thì không dùng được. Giúp em với :

    Public Function mahoa(ByVal value As String) '

    Dim x = New System.Security.Cryptography.MACTripleDES ' MD5CryptoServiceProvider
    Dim bs() As Byte
    bs = System.Text.Encoding.UTF8.GetBytes(value) 'mess
    bs = x.ComputeHash(bs)
    Dim s As System.Text.StringBuilder = New System.Text.StringBuilder
    Dim b As Byte

    For Each b In bs
    s.Append(b.ToString("x2").ToLower())
    Next
    Dim tam As String
    tam = (Convert.ToString(s)).ToUpper

    Return tam 's.ToString().ToUpper()

    End Function

    cảm ơn các huynh nhiều

  3. #13
    Tham gia
    17-07-2006
    Bài viết
    301
    Like
    0
    Thanked 7 Times in 6 Posts
    kakakakaka... Thường khi tạo tài khoản bạn mã hóa nó đi nhưng khi đăng nhập bạn phải dùng cái hàm bạn đã viết để so sánh chuỗi nhập vào với chuỗi lưu trong DB....

    Không biết bạn sử dụng PHP hay JSP hay ASP.NET.

    Bạn có thể tham khảo một số tài nguyên liên quan. nếu sài ASP.NET bạn có tham khảo giáo trình tôi viết đã phát hành Tập 2 ở chương bảo mật nghe (http://www.becivn.net/bookhot.aspx) qua đó có nhiều cách để bạn chọn ^^.
    nếu ở SaiGon mà đọc có gì quan trọng có thể liên hệ với tác giả (là tôi) ^^.
    ==================
    www.becivn.net
    www.nguyenlan.net
    YH: lanit_itec

  4. #14
    Tham gia
    17-06-2008
    Bài viết
    9
    Like
    0
    Thanked 1 Time in 1 Post
    Theo mình thì như thế này có 2 cách như các bạn thảo luận đó:
    1. Dùng MD5 được hỗ trợ bởi .net và lưu ý rằng đây là thuật toán mã hoá được đánh giá là tốt nhất nhất. MD5 chỉ dùng để mã hoá chứ khồng thể (hay chưa thể) giải mã được.
    2. bạn dùng 1 thuật toán của bạn (thuật toán đơn giản thui) ví dụ như này
    + sau khi có xâu pass
    + Chuyển các ký tự trong xâu pass sang dạng số ta được 1 dãy số
    + Dùng 1 hàm bất kỳ (ví sụ số thư nhất *2+số thừ 2*3+...) ta sẽ được 1 số là mã hoá của xâu pass
    + Khi người dùng nhập pass dùng lại chính hàm này kiểm tra xem có trung trong DB không, nếu trùng thì OK nếu ko thì not OK.

    Chúc các bạn khám phá được nhiều về C#

  5. #15
    Tham gia
    22-12-2003
    Bài viết
    187
    Like
    0
    Thanked 4 Times in 3 Posts
    Thuật toán mã hoá MD5 nghe nói đã bị phát hiện ra lỗ hổng rồi có thể bị giải mã, nhiều chuyên gia khuyên nên sử dụng RSA để thay thế. Tuy nhiên nếu chỉ là trên mấy cái ứng dụng thường thường thì MD5 cũng ok rồi.

    Một thuận lợi của MD5 là nó trả về Chuỗi mã hoá có độ dài bằng 32 ký tự với tất cả các chuỗi nguồn. Như vậy cột pass của bạn có thể định nghĩa : varchar(32).

  6. #16
    Tham gia
    15-09-2008
    Bài viết
    2
    Like
    0
    Thanked 0 Times in 0 Posts

    Hấp dẫn đây ! Mã hóa Password

    Nếu mã hóa như vậy mỗi lần hóa hóa thì ra kết quả 1 xâu khác ., Vậy khi đang nhập ta nhập pass thì ta lại mã hóa pass đó và so sánh với pass trong CSDL . Nhưng mỗi lần mã hóa ra kết quả khác nhau thế thì so sánh làm sao đc vậy các bác. Các bác giúp em với

  7. #17
    Tham gia
    14-05-2005
    Bài viết
    187
    Like
    0
    Thanked 0 Times in 0 Posts
    Chà chà các bạn nói cái gì mà tôi ko hiểu được. Sao lại không thể giải mã vậy mã hóa để làm gì ???
    Xin phép được trình bày 2 phương pháp Encrypt/Decrypt rất đơn giản dùng HashMD5 và TripleDES

    Giải thích:

    Dùng hàm Encrypt để mã hóa xâu password sau đó lưu xâu này vào CSDL
    Code:
    private static string Encrypt(string i_strEncrypt, bool i_blUseHashing)
            {
                byte[] v_arrKey;
                byte[] v_arrEncrypt = new byte[(int)i_strEncrypt.Length];
                try
                {
                    v_arrEncrypt = UTF8Encoding.UTF8.GetBytes(i_strEncrypt);
                }
                catch (Exception v_ex)
                {
                    MessageBoxInfo(v_ex.Message);
                }
                string v_strKey = "fatherofbill";
                if (i_blUseHashing)
                {
                    MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
                    v_arrKey = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(v_strKey));
                    hashmd5.Clear();
                }
                else
                {
                    v_arrKey = UTF8Encoding.UTF8.GetBytes(v_strKey);
                }
                TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
                tdes.Key = v_arrKey;
                tdes.Mode = CipherMode.ECB;
                tdes.Padding = PaddingMode.PKCS7;
    
                ICryptoTransform cTransform = tdes.CreateEncryptor();
                byte[] resultArray = cTransform.TransformFinalBlock(v_arrEncrypt, 0, v_arrEncrypt.Length);
                tdes.Clear();
                return Convert.ToBase64String(resultArray, 0, resultArray.Length);
            }
    Hàm Decrypt là hàm ngược của Encrypt dùng để giải mã dữ liệu đã mã hóa
    Code:
    public static string Decrypt(string cipherString, bool i_blUseHashing)
            {
                byte[] v_arrKey;
                byte[] v_arrEncrypt = new byte[(int)cipherString.Length];
                try
                {
                    v_arrEncrypt = Convert.FromBase64String(cipherString);
                }
                catch (Exception v_ex)
                {
                    MessageBoxInfo(v_ex.Message);
                }
                string v_strKey = "fatherofbill";
                if (i_blUseHashing)
                {
                    MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
                    v_arrKey = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(v_strKey));
                    hashmd5.Clear();
                }
                else
                {
                    v_arrKey = UTF8Encoding.UTF8.GetBytes(v_strKey);
                }
                TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
                tdes.Key = v_arrKey;
                tdes.Mode = CipherMode.ECB;
                tdes.Padding = PaddingMode.PKCS7;
    
                ICryptoTransform cTransform = tdes.CreateDecryptor();
                byte[] resultArray = cTransform.TransformFinalBlock(v_arrEncrypt, 0, v_arrEncrypt.Length);
    
                tdes.Clear();
                return UTF8Encoding.UTF8.GetString(resultArray);
            }
    Lưu ý:
    - Hàm Decrypt trả lại giá trị ban đầu trước khi mã hóa. Do vậy để so khớp password bạn có thể decrypt password lưu trong CSDL và so sánh với pass người dùng nhập vào hoặc encrypt password do người dùng nhập vào sau đó so khớp với pass đã encrypt lưu trong CSDL. Dùng cách nào là tùy bạn lựa chọn
    - Key dùng để mã hóa (Encrypt) và (Decrypt) phải trùng nhau

    Bạn rass_it thử xem có vấn đề gì thì cùng trao đổi lại. Cái này tôi đang sử dụng trong ứng dụng của mình nên có thể đảm bảo là 100% it works
    Được sửa bởi FatherOfBill lúc 16:35 ngày 06-10-2009

  8. #18
    Tham gia
    14-05-2005
    Bài viết
    187
    Like
    0
    Thanked 0 Times in 0 Posts
    Không ai quan tâm đến vấn đề này nữa à?

  9. #19
    Tham gia
    05-05-2008
    Bài viết
    183
    Like
    0
    Thanked 8 Times in 6 Posts
    Có các dạng mã hóa sau:
    - Hash: Băm (MD5, SHA, SHA2, TrippleDES)
    - Symmetric: Mã hóa đối xứng (Rjndael)
    - Asymmetric: Mã hóa bất đối xứng (RSA)

    MD5 là loại Hash, độ dài hình như là 128 bit (ko nhớ rõ). Lý thuyết băm thì các bạn mở giáo trình đại học hay các sách về Cryptography ra tham khảo, có thể hiểu như là mã hóa mất thông tin, do vậy ko thể giải ngược lại. Nói cho chính xác thì do đụng độ trong mảng băm nên chỉ có source X => hash Y chứ ko có chuyện hash Y => source X, vì từ hash Y thì mình ko biết source là X1, X2 hay là Xn

    Độ dài của MD5 là 128 bit thì nó có thể biểu diễn 2 mũ 128 giá trị. Nhưng giá trị chuỗi thì vô hạn => chắc chắn có đụng độ, tức là có nhiều hơn 1 chuỗi khi băm sẽ cho cùng 1 hash.

    Vấn đề giải mã Hash chỉ là vấn đề sức mạnh của máy tính, máy càng mạnh chạy càng nhanh thì giải mã càng lẹ, giống như vét cạn ấy.

    Lần cuối mình đọc được tin là 1 trong những siêu máy tính vài ngàn con CPU giải được RSA 512 bit trong 2 năm (ko biết giải RSA phức tạp hơn SHA và MD5 hay ko).

    Nếu muốn mã hóa 1 chiều bạn nên dùng SHA256 hoặc SHA512 .NET có hỗ trợ chung với MD5 ấy.

    Mã hóa tại sao dùng Hash mà ko dùng Symmetric hay Asymmetric ? Tốc độ. Password cũng ko cần dịch ngược lại để làm gì. Hash được đánh giá tốt hay không là do tốc độ của thuật toán. Trong trường hợp password, 2 password cho cùng 1 hash tỉ lệ rất nhỏ 1/(2 mũ 128) với MD5 và 1/(2 mũ 512) với SHA2 512 bit. Cái nữa là lưu pasword bằng hash thì hacker có lấy được cả DB cũng chẳng biết lấy gì giải, trừ khi mua siêu máy tính. Với Hash và Symmetric 1 chuỗi thường cho ra 1 chuỗi mã hóa cố định, do vậy người ta thường cho thêm salt (1 số random bất kì) để tạo ra các hash khác nhau khi truyền qua internet. Mình làm RSA trên .NET thì mỗi lần mã hóa thì nhận được kết quả khác nhưng chạy chậm lắm (vì phải giải mã ngược lại nữa, trong khi Hash thi ko cần).
    Được sửa bởi littleNeo lúc 15:10 ngày 28-10-2009

Trang 2 / 2 FirstFirst 12

Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • Bạn không thể gửi file đính kèm
  • Bạn không thể sửa bài viết của mình
  •