PHP加密與實際應用

來源:互聯網
上載者:User

資料加密可以簡單的理解為:明文(檔案或者資料)-->演算法處理-->不可讀的密文,進而達到加密的效果。

php中的幾種加密方式

  • md5密碼編譯演算法

  • crypt演算法

  • sha1密碼編譯演算法

  • URL編碼技術編碼

  • base64編碼

  • 其中 md5、crypt、sha1 都是單向密碼編譯演算法 (對不同長度的資訊進行散列計算,得到固定長度的輸出,這個過程是單向的,不能通過對固定長度的輸出通過計算得到輸入資訊)。

    md5()密碼編譯演算法

    string md5 ( string $str [, bool $raw_output = false ] )
    以 32 字元十六進位數字形式返回散列值。
    如果可選的 raw_output 被設定為 TRUE,那麼 MD5 報文摘要將以原始的 16 位二進位格式返回。

        header("Content-type:text/html;charset=utf-8");    $name = "yuesir";    echo md5($name);    echo "";    echo md5($name, true);
    e217951255a1f0b2c9d8fea477af795e??U???????w?y^

    Crypt()密碼編譯演算法

    string crypt ( string $str [, string $salt ] )
    $salt是加密是的幹擾碼,使編碼更安全;可選的鹽值字串。如果沒有提供,演算法行為將由不同的演算法實現決定,並可能導致不可預料的結果
    crypt() 返回一個基於標準 UNIX DES 演算法或系統上其他可用的替代演算法的散列字串。
    如果沒有提供鹽值,PHP 將自動產生一個 2 個字元(DES)或者 12 個字元(MD5)的鹽值

    note:

  • 如果加密是沒有加上 $salt 這個參數,將隨機產生一個幹擾碼,否則重新整理加密密文不變

  •     header("Content-type:text/html;charset=utf-8");    $name = "yuesir";    echo crypt($name);    echo "";    echo crypt($name, 'hello');
        $1$BG2.0N3.$zysIbnXYFkPyqr9g8XFo/1    heS64YGnAn6Wc
    **$1$BG2.0N3.$** 是通過 CRYPT_MD5 產生的散列值特徵是以 $1$開頭,以$結束,其間有不超過8位的隨機字元,$之後的是密文本文

    sha1() 密碼編譯演算法

    string sha1 ( string $str [, bool $raw_output = false ] )
    如果可選的 raw_output 參數被設定為 TRUE,那麼 sha1 摘要將以 20 字元長度的原始格式返回,否則傳回值是一個 40 字元長度的十六進位數字。

        header("Content-type:text/html;charset=utf-8");    $name = "yuesir";    echo sha1($name);    echo "";    echo sha1($name, 'hello');
        1b15630e04990268e3f64c32a119417642fb98d0    c?h??L2?AvB???
        和md5()差不多,但返回的字串長度更長(40位)    由於此函數依賴的演算法已不足夠複雜,不推薦使用此函數對純文字密碼加密

    URL編碼技術

    string urlencode ( string $str )
    返回字串,此字串中除了 -_. 之外的所有非字母數字字元都將被替換成百分比符號(%)後跟兩位十六進位數,空格則編碼為加號(+)

        header("Content-type:text/html;charset=utf-8");    $url = "http://yufu.me?q=hello world + 你好&username=&";    echo urlencode($url) . "
    "; echo "點我";
    http%3A%2F%2Fyufu.me%3Fq%3Dhello+world+%2B+%E4%BD%A0%E5%A5%BD%26username%3D%26amp點我

    urldecode

    string urldecode ( string $str )
    解碼已編碼的 URL 字串, 解碼給出的已編碼字串中的任何 %##。返回解碼後的字串

        header("Content-type:text/html;charset=utf-8");    $url = "http://yufu.me?q=hello world + 你好&username=&";    echo urlencode($url) . "";    echo    urldecode("http%3A%2F%2Fyufu.me%3Fq%3Dhello+world+%2B+%E4%BD%A0%E5%A5%BD%26username%3D%26amp");----------http%3A%2F%2Fyufu.me%3Fq%3Dhello+world+%2B+%E4%BD%A0%E5%A5%BD%26username%3D%26amphttp://yufu.me?q=hello world + 你好&username=&

    注意到 username 的值& 被瀏覽器解析成了 &
    解決方案是:

    較為簡單的解決辦法是使用 & 代替 & 作為分隔字元。你不需要為此修改 PHP 的 arg_separator。讓它仍為 &,而僅使用 htmlentities() 或 htmlspecialchars() 對你的 URL 進行編碼。

    base64加密技術

    string base64_encode ( string $data )
    使用 MIME base64 對資料進行編碼, 是為了使位元據可以通過非純 8-bit 的傳輸層傳輸,例如電子郵件的主體; Base64-encoded 資料要比未經處理資料多佔用 33% 左右的空間

    base64_decode
    string base64_decode ( string $encoded_data )
    對使用 MIME base64 編碼的資料進行解碼,返回未經處理資料,失敗則返回 FALSE。返回的資料可能是二進位的

        $img_path = 'image/1_meitu_1.jpg';    $data = file_get_contents($img_path);    echo base64_encode($data);    echo "";
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.