示例:linux上如何使用openssl擴展
1. 首先得安裝php的openssl擴展
``` shell
php -m | grep openssl
```
執行以上命令,確保已經安裝了openssl php擴展
2. 接下來要安裝Linux openssl
``` shell
yum -y install openssl-devel
```
3. 生成RSA公鑰和私鑰
- 生成私鑰
``` shell
openssl genrsa 1024 > rsa_private.key
```
>[warning]1024是密鑰的長度,如果密鑰較長,相應加密后的密文也會較長
- 生成公鑰
``` shell
openssl rsa -in rsa_private.key -pubout > rsa_public.key
```
## :-: **openssl詳解**
### :-: **openssl簡介**
數據加密是信息信息傳輸中的一個重要組成部分.任何信息都以明文方式傳輸,確實是個很不安全的做法.所以,
需要對數據進行加密.將明文數據轉換為密文數據,再進行傳輸.
OpenSSL是一套用于SSL/TLS協議的加密工具,其作用有:
1.生成私有密鑰.
2.生成證書,即數字簽名證書,它包含一個公有密鑰,可以用來單向的加密和解密數據.即,使用公鑰加密的數據,只能使用
私有密鑰解密.使用私鑰加密的數據,可以使用公鑰來解密.
3.計算信息摘要.
4.SSL/TLS客戶端和服務器端測試.
5.處理S/MIME標記和郵件的加密.
## :-: **加密技術簡介**
- 加密,即將明文數據轉換為密文數據的過程.以起到對明文保密的作用.
- 加密算法: 數據加密過程所采用的一種運算算法.用于將明文轉換為密文.
- 密鑰: 加密算法通過與密鑰進行某種運算,將明文數據進行加密,生成加密數據.解密時,加密算法通過密鑰,
將加密數據再轉換為明文數據.
- 現今的加密技術,加密算法是公開的,即所有人都知道加密所采用的運算方式.但只有使用密鑰才能進行
對密文的解密.所以,密鑰的保護,是數據安全的核心.
## :-: **openssl工具使用簡介**
1、生成私有密鑰,可以使用不同的數字簽名算法
```shell
//采用DSA算法
$ openssl dsaparam -noout -out dsakey0.pem -genkey 1024
//采用RSA算法
$ openssl genrsa -out rsakey0.pem 1024
采用RSA算法,并使用密碼保護.在生成私鑰時,需要輸入一個密碼,用于保護私鑰.
在使用這個私鑰進行加/解密操作時,也需要輸入這個密碼.
$ openssl genrsa -des3 -out rsakey1.pem 10242.
```
2、公用密鑰的生成方法,根據私鑰來生成公鑰
``` shell
//生成dsa算法的公鑰
$ openssl dsa -in dsakey0.pem -pubout -out dsakey0-pub.pem
//生成rsa算法的公鑰
$ openssl rsa -in rsakey0.pem -pubout -out rsakey0-pub.pem3.
```
3、自簽名證書的生成方法
```shell
//產生DSA算法的證書
$ openssl req -x509 -key dsakey0.pem -days 365 -out mycert-dsa.pem -new
//產生RSA算法的證書
$ openssl req -x509 -key rsakey0.pem -days 365 -out mycert-rsa.pem -new
```
4、使用證書進行郵件加密
我們的明文信件內容:
``` shell
$ cat test.txt
111111
222222
333333
444444
aaaaaa
```
使用證書對明文信件進行加密,輸出到etest.txt文件:
``` shell
$ openssl smime -encrypt -in test.txt -out etest.txt mycert-rsa.pem
```
查看加密后的密文內容:
``` shell
$ cat etest.txt
MIME-Version: 1.0
Content-Disposition: attachment; filename="smime.p7m"
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name="smime.p7m"
Content-Transfer-Encoding: base64
MIIBYAYJKoZIhvcNAQcDoIIBUTCCAU0CAQAxgewwgekCAQAwUjBFMQswCQYDVQQG
EwJBVTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lk
Z2l0cyBQdHkgTHRkAgkAr71mh4NRX/UwDQYJKoZIhvcNAQEBBQAEgYCbrA1WBwQK
Zj7TcNtrxiDzqMBc/Lu063SLKvBK6mQMqT+npFOOFtzIKdFVkldH0YyQhMZDSCyq
YUtGwOaDw6Jn0AHRt64UwPOKoaeL9RVqp9vgtiFC/uXis5UeyZCWS1z7Jsih8Aa+
Da/DQN0sOCX85OdK/TDewNx8mTaYBbVf4jBZBgkqhkiG9w0BBwEwGgYIKoZIhvcN
AwIwDgICAKAECNxsgiJ2s+1ugDC6JknPL+rDYBCddcyPH+bMYjqrUP0hE/GQ5WSj
sv8CDkOUdvY5XG440yiAL3Z3ysI=
```
使用私鑰進行解密,輸出到dtest.txt文件:
``` shell
$ openssl smime -decrypt -in etest.txt -inkey rsakey0.pem -out dtest.txt
```
查看解密后的信件內容,與原明文信件內容完全一致.
``` shell
$ cat dtest.txt
111111
222222
333333
444444
aaaaaa
```
5、簡單的文件加密
明文文件內容:
``` shell
$ cat test.txt
1
22
333
4444
55555
Hello
```
加密明文文件,輸出為test.enc文件,輸入”123123”作為加密密碼:
``` shell
$ openssl enc -aes-256-cbc -salt -in test.txt -out test.enc
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:
```
對密文進行解密,輸入”123123”作為解密密碼:
``` shell
$ openssl enc -d -aes-256-cbc -in test.enc
enter aes-256-cbc decryption password:
1
22
333
4444
55555
Hello
```
6、簡單的字符串加密
采用base64方式進行加密:
``` shell
$ echo "encode me" | openssl enc -base64
ZW5jb2RlIG1lCg==
```
解密時,需要知道加密算法,才可解密:
``` shell
$ echo "ZW5jb2RlIG1lCg==" | openssl enc -base64 -d
encode me
```
7、SSL客戶端和服務器的測試
使用私鑰和證書啟動SSL服務器,"-www”的作用是,當客戶端連接服務器時,發送一個狀態信息網頁到客戶端.
openssl s_server -key mykey.pem -cert mycert.pem -www連接SSL服務器到,客戶端會獲得服務器的證書:
openssl s_client -connect localhost:4433
- 雜談
- 開發 & 維護的工作流程
- 新手如何看php手冊 和 框架手冊
- 開發 & 維護的不同點
- 從0到1,搭建新項目的工作流程
- 從1到N,維護的工作流程
- 優化流程
- 生成錯誤日志和慢日志的方法
- 查錯思路
- 怎么快速接手一個項目
- 前端常用知識點
- javascript
- 自己封裝的函數
- 處理數字
- 功能代碼
- 動態添加圖片
- 判斷是手機端還是pc端
- javascript:;是什么意思?怎么用呢
- html & h5
- a標簽中target設置為blank和_blank有什么區別?
- 亂碼
- 提交方式:button標簽 和 input
- 塊元素
- 內聯元素
- h5特有屬性
- h5的localStorage【增、刪、改、查】
- jquery
- 常用方法
- 功能代碼
- 動態刪除圖片
- 一個按鈕,切換2種狀態
- 換膚
- 深入理解(function(){... })();
- json & xml
- json
- 語法速記
- json對象取值
- 字符串、對象、數組的區別
- xml
- [CDATA[%s]]的作用是什么
- 轉義字符
- CDATA 想被xml解析的文本數據
- CDATA 不想被xml解析的文本數據
- 微信小程序
- 其他
- websocket
- 跨域
- css
- 行內 & 內連 & 外連 寫法
- 優先級
- 更加精準的匹配
- 使用百分比如何生效
- php在html、js、jq中的的原生寫法
- *php在html中的語法
- php在js中的語法
- php在jq中的語法
- 正則表達式
- php常用基礎知識(思想為主)
- php為什么是“邊編譯邊運行”
- 冒號、endif、endwhile、endfor使用
- 遞歸思想(速記法)
- cookie和session的理解
- php常用內置(系統)函數
- 常量
- 字符串
- 數組
- 日期時間
- 文件 & 目錄
- 數學
- 程序執行
- 判斷
- 選項和信息(修改配置文件的)
- 錯誤處理 & 日志記錄
- 編碼格式
- session
- IP相關
- 類 & 對象
- 性能
- 其他函數
- 魔術方法
- $_SERVER
- 變量處理
- php自己封裝的一些函數
- 導入、導出、生成文件
- 數組
- 數字
- 字符串
- 其他
- 獲取linux硬件信息
- 常見插件/類庫使用
- 前端-框架/插件
- bootstrap 學習筆記
- layer 學習筆記
- layDate 學習筆記
- 百度ueditor1.4.4.3富文本編輯器
- quill富文本編輯器
- 百度ECharts圖形報表
- webuploader上傳圖片
- 后端類庫
- workerman 聊天室
- QRCODE 二維碼
- redis
- seaslog 日志
- phpspider 爬蟲
- Mailer 發送郵件
- simple_html_dom
- phpstorm使用
- 快捷鍵
- 連接mysql數據庫
- 斷點 + debug調試
- 運行內存不夠
- wamp環境
- yii、laravel、tp、開發自己的php框架
- 看框架源碼的思路
- tp5框架的使用
- 1、助手函數原理解析
- 開發自己的php框架
- 常用的開發思路 和 小功能實現代碼
- 爬蟲思路
- 功能點思路
- tp5判斷是不是異地登錄(簡單版)
- 微信開發,反向代理
- 微信開發,關閉當前頁面
- 消息隊列的實現
- 頁面靜態化
- session串號
- 站內信設計思路
- web在線管理器
- 語言相關(開發有關)
- 接收json(text/xml)格式數據
- 原生文件上傳(狀態碼)
- openssl擴展
- 打印對象 和 遍歷對象
- 使用OB緩存的幾個原則
- CLI模式執行php文件
- foreach時,添加元素 或 修改元素的值
- 功能點 代碼實現
- 生成url目錄樹(沒有pid)
- 多圖上傳(vue傳base64)
- 下載文件,耗時算法
- 生成商品二維碼
- 導出excel
- 搜索
- 阿里大魚發短信
- 使用阿里云oss
- location.href跳轉后,丟失用戶的session
- “\r ” “\r\n” “\t”的區別
- php的配置文件詳解
- 開啟錯誤日志
- 開啟慢日志
- 開啟短標簽
- 分析php-fpm.conf中的request_terminate_timeout參數