乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      C# 我有一個(gè)WPF應(yīng)用程序有兩個(gè)Passwo

       牛人的尾巴 2016-03-22

      C# 我有一個(gè)WPF應(yīng)用程序有兩個(gè)Passwo



      c# 密碼passwords equals passwordbox securestring
      我有一個(gè)WPF應(yīng)用程序有兩個(gè)PasswordBoxes,一個(gè)是密碼,另一個(gè)用于密碼輸入第二個(gè)確認(rèn)的目的。我是想PasswordBox.SecurePassword得到SecureString密碼的,但我需要能夠在兩個(gè)PasswordBoxes的內(nèi)容,以確保平等之前,我接受密碼。然而,兩個(gè)相同的SecureStrings被視為不相等:
      var secString1 = new SecureString();
      var secString2 = new SecureString();
      foreach (char c in "testing")
      {
       secString1.AppendChar(c);
       secString2.AppendChar(c);
      }
      Assert.AreEqual(secString1, secString2); // This fails
      
      我是Password該P(yáng)asswordBoxes物業(yè)有違僅訪問點(diǎn)SecurePassword安全性? 編輯:基于這個(gè)問題 CodeGo.net,我檢查了關(guān)于“使用Marshal類來轉(zhuǎn)換的SecureString為ANSI或Unicode或一個(gè)BSTR”,那么也許我的這個(gè)博客帖子。
      本文地址 :CodeGo.net/1705583/
      -------------------------------------------------------------------------------------------------------------------------
      1.它看起來像你這樣兩SecureStrings。 不安全的代碼來遍歷字符串:
      bool SecureStringEqual(SecureString s1, SecureString s2) 
      { 
       if (s1 == null) 
       { 
        throw new ArgumentNullException("s1"); 
       } 
       if (s2 == null) 
       { 
        throw new ArgumentNullException("s2"); 
       } 
       if (s1.Length != s2.Length) 
       { 
        return false; 
       } 
       IntPtr bstr1 = IntPtr.Zero; 
       IntPtr bstr2 = IntPtr.Zero; 
       RuntimeHelpers.PrepareConstrainedRegions(); 
       try 
       { 
        bstr1 = Marshal.SecureStringToBSTR(s1); 
        bstr2 = Marshal.SecureStringToBSTR(s2); 
        unsafe 
        { 
         for (Char* ptr1 = (Char*)bstr1.ToPointer(), ptr2 = (Char*)bstr2.ToPointer(); 
          *ptr1 != 0 && *ptr2 != 0; 
           ++ptr1, ++ptr2) 
         { 
          if (*ptr1 != *ptr2) 
          { 
           return false; 
          } 
         } 
        } 
        return true; 
       } 
       finally 
       { 
        if (bstr1 != IntPtr.Zero) 
        { 
         Marshal.ZeroFreeBSTR(bstr1); 
        } 
        if (bstr2 != IntPtr.Zero) 
        { 
         Marshal.ZeroFreeBSTR(bstr2); 
        } 
       } 
      } 
      
      我已經(jīng)修改了它下面沒有不安全的代碼工作(但是請(qǐng)注意,你可以在調(diào)試的時(shí)候看到的字符串以純文本):
       Boolean SecureStringEqual(SecureString secureString1, SecureString secureString2)
       {
        if (secureString1 == null)
        {
        throw new ArgumentNullException("s1");
        }
        if (secureString2 == null)
        {
        throw new ArgumentNullException("s2");
        }
        if (secureString1.Length != secureString2.Length)
        {
        return false;
        }
        IntPtr ss_bstr1_ptr = IntPtr.Zero;
        IntPtr ss_bstr2_ptr = IntPtr.Zero;
        try
        {
        ss_bstr1_ptr = Marshal.SecureStringToBSTR(secureString1);
        ss_bstr2_ptr = Marshal.SecureStringToBSTR(secureString2);
        String str1 = Marshal.PtrToStringBSTR(ss_bstr1_ptr);
        String str2 = Marshal.PtrToStringBSTR(ss_bstr2_ptr);
        return str1.Equals(str2);
        }
        finally
        {
        if (ss_bstr1_ptr != IntPtr.Zero)
        {
         Marshal.ZeroFreeBSTR(ss_bstr1_ptr);
        }
        if (ss_bstr2_ptr != IntPtr.Zero)
        {
         Marshal.ZeroFreeBSTR(ss_bstr2_ptr);
        }
        }
       }
      

      2. 這不會(huì)有不安全的塊并不會(huì)以明文顯示密碼:
      public static bool IsEqualTo(this SecureString ss1, SecureString ss2)
      {
       IntPtr bstr1 = IntPtr.Zero;
       IntPtr bstr2 = IntPtr.Zero;
       try
       {
       bstr1 = Marshal.SecureStringToBSTR(ss1);
       bstr2 = Marshal.SecureStringToBSTR(ss2);
       int length1 = Marshal.ReadInt32(bstr1, -4);
       int length2 = Marshal.ReadInt32(bstr2, -4);
       if (length1 == length2)
       {
       for (int x = 0; x < length1; ++x)
       {
       byte b1 = Marshal.ReadByte(bstr1, x);
       byte b2 = Marshal.ReadByte(bstr2, x);
       if (b1 != b2) return false;
       }
       }
       else return false;
       return true;
       }
       finally
       {
       if (bstr2 != IntPtr.Zero) Marshal.ZeroFreeBSTR(bstr2);
       if (bstr1 != IntPtr.Zero) Marshal.ZeroFreeBSTR(bstr1);
       }
      }
      
      編輯:固定泄漏的由Alex J.
      本文標(biāo)題 :C# 我有一個(gè)WPF應(yīng)用程序有兩個(gè)Passwo
      本文地址 :CodeGo.net/1705583/ 

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多