سؤال

أرغب في استخدام مرحاء تأمين داخل VB.NET وتحويل ذلك إلى Hash Sha1 أو Sha512. كيف يمكنني تحويل التمرينات بشكل آمن إلى صفيف البايت أن Hashalgorithm.computehash سيقبل؟

هل كانت مفيدة؟

المحلول

كتبته في C # وتحويلها إلى VB. نأمل أن لا يزال يعمل!

Dim input As [Char]() = "Super Secret String".ToCharArray()
Dim secret As New SecureString()

For idx As Integer = 0 To input.Length - 1
    secret.AppendChar(input(idx))
Next
SecurePassword.MakeReadOnly()

Dim pBStr As IntPtr = Marshal.SecureStringToBSTR(secret)

Dim output As String = Marshal.PtrToStringBSTR(pBStr)
Marshal.FreeBSTR(pBStr)

Dim sha As SHA512 = New SHA512Managed()
Dim result As Byte() = sha.ComputeHash(Encoding.UTF8.GetBytes(output))

تعديل:

كما تم الإشارة به بنفسي وعدد قليل من الآخرين في التعليقات، أريد أن أحضر هذا إلى هنا. القيام بذلك ليست فكرة جيدة. أنت تتحرك البايتات إلى مكان لم يعد آمنا. بالتأكيد يمكنك القيام بذلك، ولكن ربما لا ينبغي

نصائح أخرى

ماذا عن ذلك، إذا تجنبنا مثيل السلسلة المستخدمة فقط (الإخراج) واستبدالها بمصفيف حرف. هذا سيمكننا من مسح هذه الصفيف بعد الاستخدام:

    public static String SecureStringToMD5( SecureString password )
    {
        int passwordLength = password.Length;
        char[] passwordChars = new char[passwordLength];

        // Copy the password from SecureString to our char array
        IntPtr passwortPointer = Marshal.SecureStringToBSTR( password );
        Marshal.Copy( passwortPointer, passwordChars, 0, passwordLength );
        Marshal.ZeroFreeBSTR( passwortPointer );

        // Hash the char array
        MD5 md5Hasher = MD5.Create();
        byte[] hashedPasswordBytes = md5Hasher.ComputeHash( Encoding.Default.GetBytes( passwordChars ) );

        // Wipe the character array from memory
        for (int i = 0; i < passwordChars.Length; i++)
        {
            passwordChars[i] = '\0';
        }

        // Your implementation of representing the hash in a readable manner
        String hashString = ConvertToHexString( hashedPasswordBytes );

        // Return the result
        return hashString;
    }

هل هناك أي شيء فاتني؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top