OpenSSL是一個開源的用以實現SSL協議的產品,它主要包括了三個部分:密碼算法庫、應用程序、SSL協議庫。Openssl實現了SSL協議所需要的大多數算法。
下面介紹使用Openssl進行文件的對稱加密操作。
一、Openssl支持的加密算法有:
-aes-128-cbc -aes-128-cfb -aes-128-cfb1
-aes-128-cfb8 -aes-128-ecb -aes-128-ofb
-aes-192-cbc -aes-192-cfb -aes-192-cfb1
-aes-192-cfb8 -aes-192-ecb -aes-192-ofb
-aes-256-cbc -aes-256-cfb -aes-256-cfb1
-aes-256-cfb8 -aes-256-ecb -aes-256-ofb
-aes128 -aes192 -aes256
-bf -bf-cbc -bf-cfb
-bf-ecb -bf-ofb -blowfish
-cast -cast-cbc -cast5-cbc
-cast5-cfb -cast5-ecb -cast5-ofb
-des -des-cbc -des-cfb
-des-cfb1 -des-cfb8 -des-ecb
-des-ede -des-ede-cbc -des-ede-cfb
-des-ede-ofb -des-ede3 -des-ede3-cbc
-des-ede3-cfb -des-ede3-ofb -des-ofb
-des3 -desx -desx-cbc
-rc2 -rc2-40-cbc -rc2-64-cbc
-rc2-cbc -rc2-cfb -rc2-ecb
-rc2-ofb -rc4 -rc4-40
二、OpenSSL加密指令語法:
SYNOPSIS
openssl enc -ciphername [-in filename] [-out filename] [-pass arg] [-e]
[-d] [-a] [-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-p]
[-P] [-bufsize number] [-nopad] [-debug]
說明:
-chipername選項:加密算法,Openssl支持的算法在上面已經列出了,你只需選擇其中一種算法即可實現文件加密功能。
-in選項:輸入文件,對於加密來說,輸入的應該是明文文件;對於解密來說,輸入的應該是加密的文件。該選項后面直接跟文件名。
-out選項:輸出文件,對於加密來說,輸出的應該是加密后的文件名;對於解密來說,輸出的應該是明文文件名。
-pass選項:選擇輸入口令的方式,輸入源可以是標准輸入設備,命令行輸入,文件、變量等。
-e選項:實現加密功能(不使用-d選項的話默認是加密選項)。
-d選項:實現解密功能。
-a和-A選項:對文件進行BASE64編解碼操作。
-K選項:手動輸入加密密鑰(不使用該選項,Openssl會使用口令自動提取加密密鑰)。
-IV選項:輸入初始變量(不使用該選項,Openssl會使用口令自動提取初始變量)。
-salt選項:是否使用鹽值,默認是使用的。
-p選項:打印出加密算法使用的加密密鑰。
三、用法舉例:
1、使用aes-128-cbc算法加密文件:openssl enc -aes-128-cbc -in install.log -out enc.log
(注:這里install.log是你想要加密的文件,enc.log是加密后的文件,回車后系統會提示你輸入密碼。)
2、解密剛才加密的文件:openssl enc -d -aes-128-cbc -in enc.log -out install.log
(注:enc.log是剛才加密的文件,install.log是解密后的文件,-d選項實現解密功能。)
3、加密文件后使用BASE64格式進行編碼:openssl enc -aes-128-cbc -in install.log -out enc.log -a
4、使用多種口令輸入方式加密:openssl enc -des-ede3-cbc -in install.log -out enc.log -pass pass:111111
(這種方法的好處是你可以把它寫入到腳本中,自動完成加密功能,不使用pass選項默認系統會提示輸入密碼並且確認,是需要人工操作的。)
5、使用多種口令輸入方式解密:openssl enc -d -des-ede3-cbc -in enc.log -out install.log -pass pass:111111
6、使用CBC模式、PKCS5Padding補碼方式的AES(128位)加密算法對壓縮文件進行加密解密
openssl enc -e -aes-128-cbc -iv 0102030405060708 -K 1234567890123456 -in input.xml -out output.xml(加密)
openssl enc -aes-128-cbc -d -in input.xml -out output.xml -K 1234567890123456 -iv 0102030405060708(解密)
7、php中執行Linux命令
$ml = "openssl enc -e -aes-128-cbc -iv ".$iv." -K ".$secret_key." -in ".$inname." -out ".$outname;
//參考地址: http://blog.csdn.net/qq_27988539/article/details/77921121?locationNum=9&fps=1
exec($ml,$res,$status); //執行命令 報錯了刪除/usr/local/php/etc/php.ini disable_functions exec命令
exec()
原型:string exec (string command [, string array [, int return_var]])
exec ()函數與system()類似,也執行給定的命令,但不輸出結果,而是返回結果的最后一行。雖然它只返回命令結果的最后一行,但用第二個參數array 可以得到完整的結果,方法是把結果逐行追加到array的結尾處。所以如果array不是空的,在調用之前最好用unset()最它清掉。只有指定了第二 個參數時,才可以用第三個參數,用來取得命令執行的狀態碼。
例子:
復制代碼 代碼如下:
<?php
exec("/bin/ls -l");
exec("/bin/ls -l", $res);
exec("/bin/ls -l", $res, $rc);
?>
參考地址:http://www.ha97.com/5114.html