<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                前幾天總結了SHA256的算法原理一文 SHA2系列的原理并不復雜,但是需要注意細節還是挺多的。不少中文博客貼出的代碼都有錯,這兩天也踩了幾個坑。 代碼在這里!!!SHA256的C Code 代碼實現主要依照的這個git倉庫crypto-algorithms,向大家推薦,里面實現了各種加密算法。 代碼正確性的測試 如何測試加密算法是否正確,上一文也提到過 我使用的是一個在線SHA256加密驗證工具 測試了三種不同類型的數據的Hash結果 - 純英文 - 中英文夾雜 - 長消息 邏輯運算 SHA256中使用的所有邏輯運算,使用宏定義的方式實現如下: #define ROTLEFT(a,b) (((a) << (b)) | ((a) >> (32-(b)))) #define ROTRIGHT(a,b) (((a) >> (b)) | ((a) << (32-(b)))) #define CH(x,y,z) (((x) & (y)) ^ (~(x) & (z))) #define MAJ(x,y,z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z))) #define EP0(x) (ROTRIGHT(x,2) ^ ROTRIGHT(x,13) ^ ROTRIGHT(x,22)) #define EP1(x) (ROTRIGHT(x,6) ^ ROTRIGHT(x,11) ^ ROTRIGHT(x,25)) #define SIG0(x) (ROTRIGHT(x,7) ^ ROTRIGHT(x,18) ^ ((x) >> 3)) #define SIG1(x) (ROTRIGHT(x,17) ^ ROTRIGHT(x,19) ^ ((x) >> 10)) 1 2 3 4 5 6 7 8 9 算法回顧 這里對SHA256原理進行簡單回顧,方便大家對照源代碼 首先需要將原始消息拆解成512-bit大小的塊 這里寫圖片描述 最后單獨甩出的不完整的塊需要被補全,對應代碼中的sha256_final函數 整體的操作是依次對塊進行Hash映射,第i塊映射的結果是第i+1塊的輸入。這個過程在函數sha256_update中完成 第一個塊的輸入是預設好的hash初值,初始化過程對應代碼中的sha256_init函數 最后一個塊的輸出便是最終的數字摘要 這里寫圖片描述 而其中最關鍵的操作是這個映射函數Map 其內部也相當于是一個循環加密的過錯,不斷將原始信息進行打亂: 這里寫圖片描述 代碼中函數sha256_transform實現了該過程 ———————————————— 版權聲明:本文為CSDN博主「隨煜而安」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。 原文鏈接:https://blog.csdn.net/u011583927/article/details/80953491 https://hash.online-convert.com/sha256-generator
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看