程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php pki加密技術(openssl)詳解

php pki加密技術(openssl)詳解

編輯:關於PHP編程
    本篇文章是對php中的pki加密技術(openssl)進行了詳細的分析介紹,需要的朋友參考下   復制代碼 代碼如下:
    <?php
    //pki加密
    //使用pki加密需要開啟 openssl擴展
    //php.ini extension = php_openssl.dll擴展
    /*pki模式是
    * 公鑰加密,私鑰解密;
    * 私鑰加密,公鑰解密;
    */
    //私鑰加密,公鑰解密
    //客戶端
    //$data數據
    $data = 'abcd';
    //獲取私鑰 $priv_key_id
    $priv_key_id = openssl_get_privatekey(file_get_contents('99bill-rsa.pem', r));
    //獲取公鑰 $pub_key_id
    $pub_key_id = openssl_get_publickey(file_get_contents('99bill-rsa.cer', r));
    //$data首選通過SHA1哈希加密,然後通過$priv_key_id私鑰加密,生成簽名$signature
    //$signature就是加密過的簽名
    //openssl_sign()加密函數,至於它的解密方法我不知道??????????????????????
    openssl_sign($data, $signature, $priv_key_id, OPENSSL_ALGO_SHA1);
    //還有兩種加密函數,而且這兩種加密函數有解密方法,知道
    //第一種:私鑰加密,公鑰解密
    //$data要加密的數據,$crypted是加密生成的數據,$decrypted是解密生成的數據; $data與$decrypted值相同
    //通過$priv_key_id私鑰加密,生成$crypted;
    openssl_private_encrypt($data, $crypted, $priv_key_id);
    echo $crypted;
    //通過$pub_key_id公鑰解密,生成$decrypted
    openssl_public_decrypt($crypted, $decrypted , $pub_key_id);
    //第二種:公鑰加密,私鑰解密
    //$data要加密的數據,$crypted是加密生成的數據,$decrypted是解密生成的數據; $data與$decrypted值相同
    //通過$pub_key_id公鑰加密,生成$crypted;
    openssl_public_encrypt($data, $crypted, $pub_key_id);
    //通過$priv_key_id私鑰解密,生成$decrypted
    openssl_private_decrypt($crypted, $decrypted, $priv_key_id);
    //注意事項,我這邊的獲取公鑰與私鑰的文件是不對應的
    //正常情況,獲取公鑰與私鑰文件是一一對應的,這裡我使用快錢的。
    //快錢給了私鑰生成文件,對應的公鑰生成文件在快錢那邊
    //快錢給了公鑰生成文件,對應的私鑰生成文件在快錢那邊
    //也就是缺少了一個公鑰生成文件和一個私鑰生成文件
    //我始終沒找到一個一一對應的私鑰、公鑰生成文件,如果你找的了發我一份,謝謝。
    // openssl_verify()方法驗證簽名是否正確(私鑰加密生成的數據返回來,用對應的公鑰驗證),只有這一種情況。
    // $signature公鑰加密生成的數據,$data原始數據,成功返回1,失敗返回0,錯誤返回-1
    // $pub_key_id公鑰
    openssl_verify($data, $signature, $pub_key_id);
    //從內存中釋放私鑰或公鑰
    openssl_free_key($priv_key_id);
    openssl_free_key($pub_key_id);


    生成私鑰與公鑰
    genrsa -out private-rsa.pem
    rsa -in private-rsa.pem -pubout -out pubic-rsa.cer

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved