1. 程式人生 > >JS與PHP互通的RSA加解密

JS與PHP互通的RSA加解密

<?php
$private_key = '-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQC3//sR2tXw0wrC2DySx8vNGlqt3Y7ldU9+LBLI6e1KS5lfc5jl
TGF7KBTSkCHBM3ouEHWqp1ZJ85iJe59aF5gIB2klBd6h4wrbbHA2XE1sq21ykja/
Gqx7/IRia3zQfxGv/qEkyGOx+XALVoOlZqDwh76o2n1vP1D+tD3amHsK7QIDAQAB
AoGBAKH14bMitESqD4PYwODWmy7rrrvyFPEnJJTECLjvKB7IkrVxVDkp1XiJnGKH
2h5syHQ5qslPSGYJ1M/XkDnGINwaLVHVD3BoKKgKg1bZn7ao5pXT+herqxaVwWs6
ga63yVSIC8jcODxiuvxJnUMQRLaqoF6aUb/2VWc2T5MDmxLhAkEA3pwGpvXgLiWL
3h7QLYZLrLrbFRuRN4CYl4UYaAKokkAvZly04Glle8ycgOc2DzL4eiL4l/+x/gaq
deJU/cHLRQJBANOZY0mEoVkwhU4bScSdnfM6usQowYBEwHYYh/OTv1a3SqcCE1f+
qbAclCqeNiHajCcDmgYJ53LfIgyv0wCS54kCQAXaPkaHclRkQlAdqUV5IWYyJ25f
oiq+Y8SgCCs73qixrU1YpJy9yKA/meG9smsl4Oh9IOIGI+zUygh9YdSmEq0CQQC2
4G3IP2G3lNDRdZIm5NZ7PfnmyRabxk/UgVUWdk47IwTZHFkdhxKfC8QepUhBsAHL
QjifGXY4eJKUBm3FpDGJAkAFwUxYssiJjvrHwnHFbg0rFkvvY63OSmnRxiL4X6EY
yI9lblCsyfpl25l7l5zmJrAHn45zAiOoBrWqpM5edu7c
-----END RSA PRIVATE KEY-----';

$public_key = '-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3//sR2tXw0wrC2DySx8vNGlqt
3Y7ldU9+LBLI6e1KS5lfc5jlTGF7KBTSkCHBM3ouEHWqp1ZJ85iJe59aF5gIB2kl
Bd6h4wrbbHA2XE1sq21ykja/Gqx7/IRia3zQfxGv/qEkyGOx+XALVoOlZqDwh76o
2n1vP1D+tD3amHsK7QIDAQAB
-----END PUBLIC KEY-----';

//echo $private_key;
$pi_key =  openssl_pkey_get_private($private_key);//這個函式可用來判斷私鑰是否是可用的,可用返回資源id Resource id
$pu_key = openssl_pkey_get_public($public_key);//這個函式可用來判斷公鑰是否是可用的
// print_r($pi_key);echo "<br>";
// print_r($pu_key);echo "<br>";


$data = "This is a test!";//原始資料
$encrypted = ""; 
$decrypted = ""; 

openssl_private_encrypt($data,$encrypted,$pi_key);//私鑰加密
$encrypted = base64_encode($encrypted);//加密後的內容通常含有特殊字元,需要編碼轉換下,在網路間通過url傳輸時要注意base64編碼是否是url安全的
openssl_public_decrypt(base64_decode($encrypted),$decrypted,$pu_key);//私鑰加密的內容通過公鑰可用解密出來

openssl_public_encrypt($data,$encrypted2,$pu_key);//公鑰加密
$encrypted2 = base64_encode($encrypted2);
openssl_private_decrypt(base64_decode($encrypted2),$decrypted2,$pi_key);//私鑰解密
?>
<html>
<head>
  <title>JSEncrypt Example</title>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <script type="text/javascript" src="./jsencrypt.js"></script>
  <script type="text/javascript" src="./jquery.js"></script>
</head>
<body>
  <script type="text/javascript">
function do_encrypt() {
      var encrypt = new JSEncrypt();
      encrypt.setPublicKey($('#pubkey').val());
      var encrypted = encrypt.encrypt($('#input').val());

      // Decrypt with the private key...
      var decrypt = new JSEncrypt();
      decrypt.setPrivateKey($('#privkey').val());
      var uncrypted = decrypt.decrypt(encrypted);

	var $bstr1=decrypt.encrypt($('#input').val());
	var $bstr2=encrypt.decrypt($bstr1);

      // Now a simple check to see if the round-trip worked.
      if (uncrypted == $('#input').val()) {
		  $('#pubkeyencode').val(encrypted);
		  $('#privkeydecode').val(uncrypted);
      }
      else {
        alert('Something went wrong....');
      }
	var decryptPHP = decrypt.decrypt("<?php echo $encrypted2;?>");
	$('#jsdecode').val(decryptPHP);
}
</script>
<label for="privkey">Private Key</label><br/>
<textarea id="privkey" rows="15" cols="65"><?php echo $private_key; ?></textarea><br/>
<label for="pubkey">Public Key</label><br/>
<textarea id="pubkey" rows="8" cols="65"><?php echo $public_key; ?></textarea><br/>

<label for="input">Text to encrypt:</label><br/>
<textarea id="input" name="input" type="text" rows=4 cols=70><?php echo $data; ?></textarea><br/>

<?php
echo "source data:".$data."<br>";
echo "private key encrypt by PHP:"."<br>";
echo $encrypted."<br>";
echo "public key decrypt by PHP:"."<br>";
echo $decrypted."<br>";
echo "---------------------------------------"."<br>";
echo "public key encrypt by PHP:"."<br>";
echo $encrypted2."<br>";
echo "private key decrypt by PHP:"."<br>";
echo $decrypted2."<br>";

echo "private key decrypt by JS:"."<br>";
?>
<textarea id="jsdecode" rows="3" cols="65"></textarea><br/>

<input id="testme" type="button" onClick="do_encrypt();" value="Test Me!!!" /><br/>
<label for="pubkey">Public Key Encrypt</label><br/>
<form name="testphp" action="demo.php" method="get">
<textarea id="pubkeyencode" name="encode" rows="5" cols="65"></textarea><br/>
<label for="pubkey">Private Key Decrypt</label><br/>
<textarea id="privkeydecode" rows="5" cols="65"></textarea><br/>

	<input type="submit"value="Test PHP!!!" /><br/>
</form>
<label for="pubkey">Private Key Decrypt By PHP</label><br/>
<textarea id="privkeydecode" rows="3" cols="65">
<?php
if($_GET["encode"]!="")
	openssl_private_decrypt(base64_decode($_GET["encode"]),$str1,$pi_key);//私鑰解密
echo $str1;
?>
</textarea><br/>
</body>
</html>

經測試,可以讓PHP與JS輕鬆配合,實現公鑰加密與私鑰解密。

相關推薦

JSPHP互通RSA解密

<?php $private_key = '-----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQC3//sR2tXw0wrC2DySx8vNGlqt3Y7ldU9+LBLI6e1KS5lfc5jl TGF7KBTSkCHBM3ouEHWqp1ZJ85iJe59aF

python Crypto AES-256-ECB PHP之間完成解密

openss 固定 base aes ecb 世界 and brush mode AES算法描述:  首先AES是一種對稱加密算法。 算法特點:   1、AES的區塊長度固定為128 比特(16字節)。    # 因此在加密前需要對待加密字符串進行填充,長度填充至128bi

關於java PHP aes-128 解密的問題

寫個這個問題呢,是自己專案中遇到了!最後java 的夥伴陪同我一起解決了,所以就記錄下啦!不做頁面優化了! java使用aes-128 加密與php 使用aes-128加密是不一樣的,首先,java加

C#/JAVA/PHP 互通DES解密演算法(ECB模式支援8位)

import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingE

RSA 解密的例子,JS加密--php解密

<?php define("KEY_PUBLIC", "-----BEGIN PUBLIC KEY----- MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMYQWDqtLgDKlQvWzacGeBMQpbicd/uo XAvgLNpFZLM7zuYFDhrYncRsl8LIHK0

非java語言使用RSA解密遇到的問題:algid parse error, not a sequence

write ltr 結果 cep exp result 命令 pat ror 遇到的問題 在一個與Ruby語言對接的項目中,決定使用RSA算法來作為數據傳輸的加密與簽名算法。但是,在使用Ruby生成後給我的私鑰時,卻發生了異常:IOException: algid pars

PHP RSA解密示例

1.生成金鑰和公鑰  開始前需要準備openssl環境  linux 需要安裝openssl工具包,傳送門http://www.openssl.org/source/  window 下需要安裝openssl的程式,傳送門http://slproweb.com/prod

PHP RSA解密工具

/** * RSA加解密工具 * User: 樂楊俊 * Date: 2016/9/17 * Time: 下午4:06 */ namespace leyangjun\Lib; class CryptRsa { /** * 私鑰加密 */

RSA解密——前端js加密,後臺解密

一、前端js     1、前端js           先引入 jsencrypt.js <script src="${pageContext.request.contextPath}/static/scripts/jquery/dist/jsencrypt.

PHP RSA解密示例(轉)

1.生成金鑰和公鑰  開始前需要準備openssl環境  linux 需要安裝openssl工具包,傳送門http://www.openssl.org/source/  window 下需要安裝openssl的程式,傳送門http://slproweb.com/product

PHP使用openssl實現RSA解密

業務場景就不用說了,有很多地方都用的到。在此寫出一個例子,一來供自己查閱,二來分享一下。。。 生成公鑰、私鑰的方法網上有很多,不過有個簡單的方法: 引用博友寫好的,點選連結檢視:linux下如何生成公鑰和私鑰 獲取到公鑰、私鑰之後,來看加密解密~~~~~~ 在此提一下跨語言

突破OPENSSL RSA解密字串長度 PHP

OPENSSL RSA加密時,明文長度受到限制,字串長度不能超過 245,所以若非要採用RSA,只能分段進行。一、將明文分段加密再拼接在一起($json是明文字串,rsaEn是加密函式,$mark是自定義符號,用於分隔每個加密塊)function encry($json, $

RSA解密簽名驗籤

1.RSA介紹 1.訊息摘要 如果訊息改變了,那麼改變之後的訊息的指紋和原訊息的指紋將不匹配,如果訊息的指紋和訊息是分開傳送的。那麼接收者就可以檢查訊息是否被篡改過。但是,如果我同時知道了訊息和指

JSRSA解密

最近專案中需要在JS中使用RSA進行加密,於是乎從網上找了一個RSA的JS(JSEncrypt)庫,使用起來也很方便。其官網地址為:http://travistidwell.com/jsencry

JS實現AES加密並PHP互通

有關資料加密解密問題,有很多鍾加密方式; 這裡我講述下js和php實現AES互通 js加密: 首先引入這幾個js檔案 <script type="text/javascript" src="/CryptoJS/aes.js"></script> &

PHP RSA解密詳解(附代碼)

獲取 null 網上銀行 get 傳輸 賬戶 linu 數字簽名 mir 前言:RSA加密一般用在涉及到重要數據時所使用的加密算法,比如用戶的賬戶密碼傳輸,訂單的相關數據傳輸等。 加密方式說明:公鑰加密,私鑰解密。也可以 私鑰加密,公鑰解密 一、RSA簡介 R

C# JAVA 的RSA 加密解密交互,互通,C#使用BouncyCastle來實現私鑰加密,公鑰解密的方法

cipher process [] var class mar tor als get 因為C#的RSA加密解密只有公鑰加密,私鑰解密,沒有私鑰加密,公鑰解密。在網上查了很久也沒有很好的實現。BouncyCastle的文檔少之又少。很多人可能會說,C#也是可以的,通過Big

php RSA解密

nim ring efi 區別 iam 功能 1=1 ted 發送 相關介紹 RSA算法屬於非對稱加密算法,非對稱加密算法需要兩個秘鑰:公開密鑰(publickey)和私有秘鑰(privatekey).公開密鑰和私有秘鑰是一對, 如果公開密鑰對數據進行加密,只有用對應的

java rsa解密算法的實現

binary 0x03 object sat ear exc triple turn create RSAUtils:RSA加解密的實現 package com.rsa.test; import java.io.ByteArrayOutputStream; import

jsphp的區別

解析 string sse php變量 $$ nbsp 提醒 set 強制 1 。 PHP拼字符串用的是點. js用+號。2。 php文件要放在wamp文件裏面的www裏面。3。 php與js的嵌入方式相同,只是嵌入的標記不一樣。4。 php輸出語法