久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

        <i id='EYBOJ'><tr id='EYBOJ'><dt id='EYBOJ'><q id='EYBOJ'><span id='EYBOJ'><b id='EYBOJ'><form id='EYBOJ'><ins id='EYBOJ'></ins><ul id='EYBOJ'></ul><sub id='EYBOJ'></sub></form><legend id='EYBOJ'></legend><bdo id='EYBOJ'><pre id='EYBOJ'><center id='EYBOJ'></center></pre></bdo></b><th id='EYBOJ'></th></span></q></dt></tr></i><div class="qwawimqqmiuu" id='EYBOJ'><tfoot id='EYBOJ'></tfoot><dl id='EYBOJ'><fieldset id='EYBOJ'></fieldset></dl></div>
        <legend id='EYBOJ'><style id='EYBOJ'><dir id='EYBOJ'><q id='EYBOJ'></q></dir></style></legend>

          <bdo id='EYBOJ'></bdo><ul id='EYBOJ'></ul>

        <small id='EYBOJ'></small><noframes id='EYBOJ'>

        <tfoot id='EYBOJ'></tfoot>

        充氣城堡 C# 中的 PBKDF2

        PBKDF2 in Bouncy Castle C#(充氣城堡 C# 中的 PBKDF2)
        <legend id='FFLBo'><style id='FFLBo'><dir id='FFLBo'><q id='FFLBo'></q></dir></style></legend>
        <i id='FFLBo'><tr id='FFLBo'><dt id='FFLBo'><q id='FFLBo'><span id='FFLBo'><b id='FFLBo'><form id='FFLBo'><ins id='FFLBo'></ins><ul id='FFLBo'></ul><sub id='FFLBo'></sub></form><legend id='FFLBo'></legend><bdo id='FFLBo'><pre id='FFLBo'><center id='FFLBo'></center></pre></bdo></b><th id='FFLBo'></th></span></q></dt></tr></i><div class="qwawimqqmiuu" id='FFLBo'><tfoot id='FFLBo'></tfoot><dl id='FFLBo'><fieldset id='FFLBo'></fieldset></dl></div>
          <bdo id='FFLBo'></bdo><ul id='FFLBo'></ul>

              • <tfoot id='FFLBo'></tfoot>
                  <tbody id='FFLBo'></tbody>

                • <small id='FFLBo'></small><noframes id='FFLBo'>

                  本文介紹了充氣城堡 C# 中的 PBKDF2的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

                  問題描述

                  限時送ChatGPT賬號..

                  我一直在搞亂 C# Bouncy Castle API 以尋找如何進行 PBKDF2 密鑰派生.

                  I've being messing around the C# Bouncy Castle API to find how to do a PBKDF2 key derivation.

                  我現在真的一無所知.

                  我嘗試閱讀 Pkcs5S2ParametersGenerator.cs 和 PBKDF2Params.cs 文件,但我真的不知道該怎么做.

                  I tried reading through the Pkcs5S2ParametersGenerator.cs and PBKDF2Params.cs files but i really cant figure out how to do it.

                  根據我目前所做的研究,PBKDF2 需要一個字符串(或 char[]),即密碼、鹽和迭代次數.

                  According to the research I have done so far, PBKDF2 requires a string (or char[]) which is the password, a salt and an iteration count.

                  到目前為止,我最有希望和最明顯的是 PBKDF2Params 和 Pkcs5S2ParametersGenerator.

                  So far the most promising and most obvious i've come so far is the PBKDF2Params and Pkcs5S2ParametersGenerator.

                  這些似乎都不接受字符串或 char[].

                  None of these seems to be accepting a string or a char[].

                  有沒有人在 C# 中做過這個或對此有任何線索?或者也許有人用 Java 實現了 BouncyCastle 并且可以提供幫助?

                  Has anyone done this in C# or have any clue about this? Or perhaps someone who has implemented BouncyCastle in Java and can help?

                  提前感謝很多:)

                  更新:我在 Bouncy Castle 中找到了如何做到這一點.看看下面的答案:)

                  UPDATE: I have found how to do this in Bouncy Castle. Look below for answer :)

                  推薦答案

                  經過幾個小時的代碼檢查,我發現最簡單的方法是在 Pkcs5S2ParametersGenerator.cs 和創建我自己的課程,當然使用其他 BouncyCastle API.這與 Dot Net Compact Framework (Windows Mobile) 完美配合.這相當于點網緊湊框架 2.0/3.5 中不存在的 Rfc2898DeriveBytes 類.好吧,也許不是確切的等價物,但可以完成工作:)

                  After hours and hours of going through the code, I found that the easiest way to do this is to take a few parts of the code in Pkcs5S2ParametersGenerator.cs and create my own class which of course use other BouncyCastle API's. This works perfectly with the Dot Net Compact Framework (Windows Mobile). This is the equivalent of Rfc2898DeriveBytes class which is not present in the Dot Net Compact Framework 2.0/3.5. Well, maybe not the EXACT equivalent but does the job :)

                  這是 PKCS5/PKCS#5

                  This is PKCS5/PKCS#5

                  使用的 PRF(偽隨機函數)將是 HMAC-SHA1

                  The PRF (Pseudo Random Function) which is used will be HMAC-SHA1

                  第一件事,第一.從 http://www.bouncycastle.org/csharp/ 下載 Bouncy Castle 編譯程序集,添加BouncyCastle.Crypto.dll 作為對您項目的引用.

                  First things, first. Download the Bouncy Castle compiled assembly from http://www.bouncycastle.org/csharp/, add the BouncyCastle.Crypto.dll as a reference to your project.

                  然后使用下面的代碼創建新的類文件.

                  After that create new class file with the code below.

                  using System;
                  using Org.BouncyCastle.Crypto;
                  using Org.BouncyCastle.Crypto.Parameters;
                  using Org.BouncyCastle.Crypto.Digests;
                  using Org.BouncyCastle.Crypto.Macs;
                  using Org.BouncyCastle.Math;
                  using Org.BouncyCastle.Security;
                  
                  namespace PBKDF2_PKCS5
                  {
                      class PBKDF2
                      {
                  
                          private readonly IMac hMac = new HMac(new Sha1Digest());
                  
                          private void F(
                              byte[] P,
                              byte[] S,
                              int c,
                              byte[] iBuf,
                              byte[] outBytes,
                              int outOff)
                          {
                              byte[] state = new byte[hMac.GetMacSize()];
                              ICipherParameters param = new KeyParameter(P);
                  
                              hMac.Init(param);
                  
                              if (S != null)
                              {
                                  hMac.BlockUpdate(S, 0, S.Length);
                              }
                  
                              hMac.BlockUpdate(iBuf, 0, iBuf.Length);
                  
                              hMac.DoFinal(state, 0);
                  
                              Array.Copy(state, 0, outBytes, outOff, state.Length);
                  
                              for (int count = 1; count != c; count++)
                              {
                                  hMac.Init(param);
                                  hMac.BlockUpdate(state, 0, state.Length);
                                  hMac.DoFinal(state, 0);
                  
                                  for (int j = 0; j != state.Length; j++)
                                  {
                                      outBytes[outOff + j] ^= state[j];
                                  }
                              }
                          }
                  
                          private void IntToOctet(
                              byte[] Buffer,
                              int i)
                          {
                              Buffer[0] = (byte)((uint)i >> 24);
                              Buffer[1] = (byte)((uint)i >> 16);
                              Buffer[2] = (byte)((uint)i >> 8);
                              Buffer[3] = (byte)i;
                          }
                  
                          // Use this function to retrieve a derived key.
                          // dkLen is in octets, how much bytes you want when the function to return.
                          // mPassword is the password converted to bytes.
                          // mSalt is the salt converted to bytes
                          // mIterationCount is the how much iterations you want to perform. 
                          
                  
                          public byte[] GenerateDerivedKey(
                              int dkLen,
                              byte[] mPassword,
                              byte[] mSalt,
                              int mIterationCount
                              )
                          {
                              int hLen = hMac.GetMacSize();
                              int l = (dkLen + hLen - 1) / hLen;
                              byte[] iBuf = new byte[4];
                              byte[] outBytes = new byte[l * hLen];
                  
                              for (int i = 1; i <= l; i++)
                              {
                                  IntToOctet(iBuf, i);
                  
                                  F(mPassword, mSalt, mIterationCount, iBuf, outBytes, (i - 1) * hLen);
                              }
                  
                          //By this time outBytes will contain the derived key + more bytes.
                         // According to the PKCS #5 v2.0: Password-Based Cryptography Standard (www.truecrypt.org/docs/pkcs5v2-0.pdf) 
                         // we have to "extract the first dkLen octets to produce a derived key".
                  
                         //I am creating a byte array with the size of dkLen and then using
                         //Buffer.BlockCopy to copy ONLY the dkLen amount of bytes to it
                         // And finally returning it :D
                  
                          byte[] output = new byte[dkLen];
                  
                          Buffer.BlockCopy(outBytes, 0, output, 0, dkLen);
                  
                          return output;
                          }
                  
                  
                      }
                  }
                  

                  那么如何使用這個功能呢?簡單的!:)這是一個非常簡單的示例,其中密碼和鹽由用戶提供.

                  So how to use this function? Simple! :) This is a very simple example where the password and the salt is provided by the user.

                  private void cmdDeriveKey_Click(object sender, EventArgs e)
                          {
                              byte[] salt = ASCIIEncoding.UTF8.GetBytes(txtSalt.Text);
                  
                              PBKDF2 passwordDerive = new PBKDF2();
                              
                  
                        // I want the key to be used for AES-128, thus I want the derived key to be
                        // 128 bits. Thus I will be using 128/8 = 16 for dkLen (Derived Key Length) . 
                        //Similarly if you wanted a 256 bit key, dkLen would be 256/8 = 32. 
                  
                              byte[] result = passwordDerive.GenerateDerivedKey(16, ASCIIEncoding.UTF8.GetBytes(txtPassword.Text), salt, 1000);
                  
                             //result would now contain the derived key. Use it for whatever cryptographic purpose now :)
                             //The following code is ONLY to show the derived key in a Textbox.
                  
                              string x = "";
                  
                              for (int i = 0; i < result.Length; i++)
                              {
                                  x += result[i].ToString("X");
                              }
                  
                              txtResult.Text = x;
                  
                          }
                  

                  如何檢查這是否正確?有一個 PBKDF2 的在線 javascript 實現http://anandam.name/pbkdf2/

                  How to check whether this is correct? There is an online javascript implementation of PBKDF2 http://anandam.name/pbkdf2/

                  我得到了一致的結果 :)如果有人得到不正確的結果,請報告:)

                  I got consistent results :) Please report if anyone is getting an incorrect result :)

                  希望這可以幫助某人:)

                  Hope this helps someone :)

                  更新:確認使用此處提供的測試向量

                  UPDATE: Confirmed working with test vectors provided here

                  https://datatracker.ietf.org/doc/html/draft-josefsson-pbkdf2-test-vectors-00

                  更新:或者,對于鹽,我們可以使用 RNGCryptoServiceProvider.確保引用 System.Security.Cryptography 命名空間.

                  UPDATE: Alternatively, for the salt we can use a RNGCryptoServiceProvider. Make sure to reference the System.Security.Cryptography namespace.

                  RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();        
                              
                  byte[] salt = new byte[16];
                  
                  rng.GetBytes(salt);
                  

                  這篇關于充氣城堡 C# 中的 PBKDF2的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

                  【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

                  相關文檔推薦

                  What are good algorithms for vehicle license plate detection?(車牌檢測有哪些好的算法?)
                  onClick event for Image in Unity(Unity中圖像的onClick事件)
                  Running Total C#(運行總 C#)
                  Deleting a directory when clicked on a hyperlink with JAvascript.ASP.NET C#(單擊帶有 JAvascript.ASP.NET C# 的超鏈接時刪除目錄)
                  asp.net listview highlight row on click(asp.net listview 在單擊時突出顯示行)
                  Calling A Button OnClick from a function(從函數調用按鈕 OnClick)
                  <tfoot id='JLhSC'></tfoot>

                    • <legend id='JLhSC'><style id='JLhSC'><dir id='JLhSC'><q id='JLhSC'></q></dir></style></legend>

                      <small id='JLhSC'></small><noframes id='JLhSC'>

                        <tbody id='JLhSC'></tbody>
                      <i id='JLhSC'><tr id='JLhSC'><dt id='JLhSC'><q id='JLhSC'><span id='JLhSC'><b id='JLhSC'><form id='JLhSC'><ins id='JLhSC'></ins><ul id='JLhSC'></ul><sub id='JLhSC'></sub></form><legend id='JLhSC'></legend><bdo id='JLhSC'><pre id='JLhSC'><center id='JLhSC'></center></pre></bdo></b><th id='JLhSC'></th></span></q></dt></tr></i><div class="qwawimqqmiuu" id='JLhSC'><tfoot id='JLhSC'></tfoot><dl id='JLhSC'><fieldset id='JLhSC'></fieldset></dl></div>

                        <bdo id='JLhSC'></bdo><ul id='JLhSC'></ul>

                          • 主站蜘蛛池模板: 亚洲一区国产 | 91一区 | 精品国产鲁一鲁一区二区张丽 | 日韩一区二区三区视频 | 黄色免费在线观看网址 | 日本一道本| 成人国产一区二区三区精品麻豆 | 亚洲精品在线视频 | 国产精品视屏 | 国产高清免费 | 丁香六月伊人 | 成人h动漫精品一区二区器材 | 国产精品自产拍在线观看蜜 | 国产精品视频导航 | 国产精品一区二区三区四区 | 亚洲伊人a | 岛国av免费在线观看 | 日韩在线一区二区三区 | 中文字幕高清视频 | 欧美不卡一区二区三区 | 伊人久久综合 | 欧美精品一二三 | 国产一区二区久久 | 免费看片在线播放 | 一级片aaa | 久久av一区二区 | wwww.8888久久爱站网 | 国产超碰人人爽人人做人人爱 | 久久精品黄色 | 国产ts人妖一区二区三区 | 国产成人精品视频在线观看 | 狠狠艹| 国产欧美精品区一区二区三区 | 国产精品一区二区三区四区 | 黑人中文字幕一区二区三区 | 国产精品99| 男女激情网 | 国产精品久久久亚洲 | 日韩毛片在线观看 | 久久久久国产精品一区二区 | 欧美国产视频 |