本篇文章是對php中php_openssl
dll的作用進行了詳細的分析介紹
需要的朋友參考下
一openssl簡介
數據加密是信息信息傳輸中的一個重要組成部分任何信息都以明文方式傳輸確實是個很不安全的做法所以
需要對數據進行加密將明文數據轉換為密文數據再進行傳輸
OpenSSL是一套用於SSL/TLS協議的加密工具其作用有:
生成私有密鑰
生成證書即數字簽名證書它包含一個公有密鑰可以用來單向的加密和解密數據即使用公鑰加密的數據只能使用
私有密鑰解密使用私鑰加密的數據可以使用公鑰來解密
計算信息摘要
SSL/TLS客戶端和服務器端測試
處理S/MIME標記和郵件的加密
二加密技術簡介
加密即將明文數據轉換為密文數據的過程以起到對明文保密的作用
加密算法: 數據加密過程所采用的一種運算算法用於將明文轉換為密文
密鑰: 加密算法通過與密鑰進行某種運算將明文數據進行加密生成加密數據解密時加密算法通過密鑰
將加密數據再轉換為明文數據
現今的加密技術加密算法是公開的即所有人都知道加密所采用的運算方式但只有使用密鑰才能進行
對密文的解密所以密鑰的保護是數據安全的核心
三openssl工具使用簡介
私有密鑰生成方法
生成私有密鑰可以使用不同的數字簽名算法下面分別介紹;
#采用DSA算法
$ openssl dsaparam noout out dsakeypem genkey
#采用RSA算法
$ openssl genrsa out rsakeypem
#采用RSA算法並使用密碼保護在生成私鑰時需要輸入一個密碼用於保護私鑰
#在使用這個私鑰進行加/解密操作時也需要輸入這個密碼
$ openssl genrsa des out rsakeypem 公用密鑰的生成方法
根據私鑰來生成公鑰
#生成dsa算法的公鑰
$ openssl dsa in dsakeypem pubout out dsakeypubpem
#生成rsa算法的公鑰
$ openssl rsa in rsakeypem pubout out rsakeypubpem自簽名證書的生成方法
#產生DSA算法的證書
$ openssl req x key dsakeypem days out mycertdsapem new
#產生RSA算法的證書
$ openssl req x key rsakeypem days out mycertrsapem new
使用證書進行郵件加密
我們的明文信件內容:
$ cat testtxt
aaaaaa
使用證書對明文信件進行加密輸出到etesttxt文件:
$ openssl smime encrypt in testtxt out etesttxt mycertrsapem查看加密後的密文內容:
$ cat etesttxt
MIMEVersion:
ContentDisposition: attachment; filename="smimepm"
ContentType: application/xpkcsmime; smimetype=envelopeddata; name="smimepm"
ContentTransferEncoding: base
MIIBYAYJKoZIhvcNAQcDoIIBUTCCAUCAQAxgewwgekCAQAwUjBFMQswCQYDVQQG
EwJBVTETMBEGAUECBMKUtZSTdGFZTEhMBGAUEChMYSWZXJuZXQgVlk
ZlcyBQdHkgTHRkAgkArmhNRX/UwDQYJKoZIhvcNAQEBBQAEgYCbrAWBwQK
ZjTcNtrxiDzqMBc/LuSLKvBKmQMqT+npFOOFtzIKdFVkldHYyQhMZDSCyq
YUtGwOaDwJnAHRtUwPOKoaeLRVqpvgtiFC/uXisUeyZCWSzJsihAa+
Da/DQNsOCXOdK/TDewNxmTaYBbVfjBZBgkqhkiGwBBwEwGgYIKoZIhvcN
AwIwDgICAKAECNxsgiJs+ugDCJknPL+rDYBCddcyPH+bMYjqrUPhE/GQWSj
svCDkOUdvYXGyiALZysI=使用私鑰進行解密輸出到dtesttxt文件:
$ openssl smime decrypt in etesttxt inkey rsakeypem out dtesttxt查看解密後的信件內容與原明文信件內容完全一致
$ cat dtesttxt
aaaaaa
簡單的文件加密
明文文件內容:
$ cat testtxt
Hello加密明文文件輸出為testenc文件輸入””作為加密密碼:
$ openssl enc aescbc salt in testtxt out testenc
enter aescbc encryption password:
Verifying enter aescbc encryption password:對密文進行解密輸入””作為解密密碼:
$ openssl enc d aescbc in testenc
enter aescbc decryption password:
Hello
簡單的字符串加密
采用base方式進行加密:
$ echo "encode me" | openssl enc base
ZWjbRlIGlCg==解密時需要知道加密算法才可解密:
$ echo "ZWjbRlIGlCg==" | openssl enc base d
encode me
SSL客戶端和服務器的測試
使用私鑰和證書啟動SSL服務器"www”的作用是當客戶端連接服務器時發送一個狀態信息網頁到客戶端
openssl s_server key mykeypem cert mycertpem www連接SSL服務器到客戶端會獲得服務器的證書:
openssl s_client connect localhost:
From:http://tw.wingwit.com/Article/program/PHP/201311/20914.html