$(document).ready(function(){
//十六進制公鑰
var rsa_n = "C34E069415AC02FC4EA5F45779B7568506713E9210789D527BB89EE462662A1D0E94285E1A764F111D553ADD7C65673161E69298A8BE2212DF8016787E2F4859CD599516880D79EE5130FC5F8B7F69476938557CD3B8A79A612F1DDACCADAA5B6953ECC4716091E7C5E9F045B28004D33548EC89ED5C6B2C64D6C3697C5B9DD3";
$("#submit").click(function(){
setMaxDigits(131); //131 => n的十六進制位數/2+3
var key = new RSAKeyPair("10001", '', rsa_n); //10001 => e的十六進制
var password = $("#password").val();
password = encryptedString(key, password); //不支持漢字
$("#password").val(password);
$("#login").submit();
alert(password); //test
});
});
PHP RSA加解密參考:
class Rsautil {
private $rsadir;
public function __construct() {
$this->rsadir = dirname(BASEPATH).'/data/rsa';
}
public function getPublicKey() {
return file_get_contents($this->rsadir.'/public.pem');
if ($crt = file_get_contents($this->rsadir.'/server.crt')) {
return openssl_get_publickey($cert);
}
return false;
}
/**
* 私鑰解密
*
* @param string $data
* @return string|boolean
*/
public function decode($data, $js = true) {
$key = openssl_get_privatekey(file_get_contents($this->rsadir.'/private.pem'));
$data = base64_decode($data);
if (openssl_private_decrypt($data, $decrypted, $key, $js ? OPENSSL_NO_PADDING : OPENSSL_PKCS1_PADDING)) {
return $js ? rtrim(strrev($decrypted), "\0") : (''.$decrypted);
}
return false;
}
}
CRT證書獲取方法:
openssl genrsa -des3 -out test.com.key 1024
openssl req -new -key test.com.key -out test.com.csr
openssl rsa -in test.com.key -out test.com.key
詳細圖示:
把上面生成的文件內容提交給CA,即可換取證書;若自行生成則:
openssl x509 -req -days 365 -in test.com.csr -signkey test.com.key -out test.com.crt
詳細圖示:
現在已有這些文件:
獲取十六進制的密鑰方法:
-rw-r--r-- 1 root root 936 05-24 19:17 test.com.crt
-rw-r--r-- 1 root root 696 05-24 19:06 test.com.csr
-rw-r--r-- 1 root root 891 05-24 19:07 test.com.key
openssl asn1parse -out temp.ans -i -inform PEM < server.pem
顯示結果如下:
從這裏可以看到最終的16進制密鑰。
注:此文需要一定基礎知識功底