網路安全問題很重要,尤其是保證資料安全,遇到很多在寫介面的程式設計師直接都是明文資料傳輸,在我看來這是很不專業的。本人提倡經過介面的資料都要進行加密解密之後進行使用。
簡單介紹rsa:
rsa加密演算法是最常用的非對稱加密演算法,cfca在證書服務中離不了它。但是有不少新手對它不太了解。下面僅作簡要介紹。rsa是第乙個比較完善的公開金鑰演算法,它既能用於加密,也能用於數字簽名。rsa以它的三個發明者ron rivest, adi shamir, leonard adleman的名字首字母命名,這個演算法經受住了多年深入的密碼分析,雖然密碼分析者既不能證明也不能否定rsa的安全性,但這恰恰說明該演算法有一定的可信性,目前它已經成為最流行的公開金鑰演算法。rsa的安全基於大數分解的難度。其公鑰和私鑰是一對大素數(100到200位十進位制數或更大)的函式。從乙個公鑰和密文恢復出明文的難度,等價於分解兩個大素數之積(這是公認的數學難題)。
下面為具體類、例項:
<?php/*** rsa演算法類
* 簽名及密文編碼:base64字串/十六進製制字串/二進位制字串流
* 填充方式: pkcs1padding(加解密)/nopadding(解密)
** notice:only accepts a single block. block size is equal to the rsa key size!
* 如金鑰長度為1024 bit,則加密時資料需小於128位元組,加上pkcs1padding本身的11位元組資訊,所以明文需小於117位元組
** @author: zhihua_wei
* @version: 1.0.0
* @date: 2017/06/30
*/class
rsa
if ($private_key_file
) }
//私有方法/**
* 自定義錯誤處理
*/private
function _error($msg
)
/*** 檢測填充型別
* 加密只支援pkcs1_padding
* 解密支援pkcs1_padding和no_padding
** @param int 填充模式
* @param string 加密en/解密de
* @return bool
*/private
function _checkpadding($padding, $type
)
} else
}return
$ret
; }
private
function _encode($data, $code
)
return
$data
; }
private
function _decode($data, $code
)
return
$data
; }
private
function _getpublickey($file
)
}private
function _getprivatekey($file
)
}private
function _readfile($file
) is not exists");
} else
return
$ret
; }
private
function _hex2bin($hex = false
)
/*** 生成簽名
** @param string 簽名材料
* @param string 簽名編碼(base64/hex/bin)
* @return 簽名值
*/public
function sign($data, $code = 'base64')
return
$ret
; }
/*** 驗證簽名
** @param string 簽名材料
* @param string 簽名值
* @param string 簽名編碼(base64/hex/bin)
* @return bool
*/public
function verify($data, $sign, $code = 'base64')
}return
$ret
; }
/*** 加密
** @param string 明文
* @param string 密文編碼(base64/hex/bin)
* @param int 填充方式(貌似php有bug,所以目前僅支援openssl_pkcs1_padding)
* @return string 密文
*/public
function encrypt($data, $code = 'base64', $padding =openssl_pkcs1_padding)
return
$ret
; }
/*** 解密
** @param string 密文
* @param string 密文編碼(base64/hex/bin)
* @param int 填充方式(openssl_pkcs1_padding / openssl_no_padding)
* @param bool 是否翻轉明文(when passing microsoft cryptoapi-generated rsa cyphertext, revert the bytes in the block)
* @return string 明文
*/public
function decrypt($data, $code = 'base64', $padding = openssl_pkcs1_padding, $rev = false
)
}return
$ret
; }
}
此為具體的rsa類。
<?php/**
* author: wei zhihua
* date: 2017/6/30 0030
* time: 上午 10:15 */
header('content-type:text/html;charset=utf-8;');
include "rsa.php";
echo '';
$pubfile = 'd:\www\test\rsa_public_key.pem';
$prifile = 'd:\www\test\rsa_private_key.pem';
$rsa = new rsa($pubfile, $prifile
);
$rst = array
( 'ret' => 200,
'code' => 1,
'data' => array(1, 2, 3, 4, 5, 6),
'msg' => "success",);
$ex = json_encode($rst
);
//加密
$ret_e = $rsa->encrypt($ex
);
//解密
$ret_d = $rsa->decrypt($ret_e
);
echo
$ret_e
; echo '';
echo
$ret_d
;
echo '';
$a = 'test';
//簽名
$x = $rsa->sign($a
);
//驗證
$y = $rsa->verify($a, $x
);
var_dump($x, $y
);
exit;
使用方法。
python使用快速乘方求冪進行RSA加解密
rsa演算法原理 1978年美國麻省理工學院的三名密碼學者r.l.rivest,a.shamir和l.adleman提出了一種基於大合數因子分解困難性的公開金鑰密碼,簡稱為rsa密碼。rsa密碼被譽為是一種風格幽雅的公開金鑰密碼。既可用於加密,又可用於數字簽名,安全 易懂,它已成為目前應用最廣泛的公...
使用RSA對資料進行加簽且驗籤
加簽驗籤是為了驗證接收到的資料的真實性問題,但此次我的應用場景是這樣的 因為要從乙個系統傳送http請求到另乙個系統的網域名稱上去獲取相應的資料,但是被請求的這個網域名稱是外網網域名稱 任何人都能通過請求這個網域名稱位址來獲取資料 所以簡單的使用簽名來做一下校驗,驗籤不通過的請求則不允許獲取資料。下...
Postman報文進行加密之RSA公鑰加密
rsa公鑰加密和私鑰加密整個結構是一致的,postman報文進行加密之rsa bate64 中私鑰做的簽名,這裡rsa公鑰是進行加密。rsa 使用公鑰對 aes密碼進行加密 functionpubencrypt pubencrypt key aeskey console info pulencryp...