php 前后端分离之rsa与des加密之旅
生活随笔
收集整理的這篇文章主要介紹了
php 前后端分离之rsa与des加密之旅
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
折騰了一下午? 從茫茫百度海里掙扎出來了
?廢話不多說
RSA 非對稱加密效率較低 而且對長度有限制? 數據量大的建議不要使用
首先去http://web.chacuo.net/netrsakeypair生成一套公私鑰
前端下載?jsencrypt.js (我這里用的是2.3.0)
使用起來也非常簡單
let encryptor = new JSEncrypt() // 新建JSEncrypt對象let publicKey = '-----BEGIN PUBLIC KEY-----'+'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3Nbnoq928KIrZ989fuyQ1ld2p'+'m1wO8sFmJmGJwpuZ6FKQNJUnSYEEbMhvfoC9zccMQjp7EqmveIixuvTZ54xb4OgS'+'qcMTtCv+7W+0h666z8PVOD/j3b3WVhktfsgQtyZShl98f1P5sVSJWVUQRZk+j0YX'+'hc66xqNTW9bliJ8+oQIDAQAB'+'-----END PUBLIC KEY-----'';encryptor.setPublicKey(publicKey) // 設置公鑰encryptor.encrypt('需要加密的數據');后臺加密
//加密openssl_public_encrypt('需要加密的數據',$encAesKey,'公鑰'); $encAesKey 就是加密后的數據//解密 $pi_key = openssl_pkey_get_private('放上剛剛生成的私鑰');//這個函數可用來判斷私鑰是否是可用的,可用返回資源id Resource id $de_crypted = openssl_private_decrypt(base64_decode('需要解密的數據'),$decrypted,$pi_key);return json_encode(['code' => 0 , 'data' => $decrypted]);?
--------------------------------------------------------------------分割線----------------------------------------------------
接下來是des加解密
前端需要下載兩個js文件分別是?
crypto-roll.js 和 crypto.js 注意 : 順序不能反了 參數key與iv(必須要16位字符) 前后臺要一致
//加密function encrypt(str, key, iv) {var encode_str = '';key = CryptoJS.MD5(key).toString();iv = CryptoJS.MD5(iv).toString();var crypto_key = CryptoJS.enc.Utf8.parse(key);var crypto_iv = CryptoJS.enc.Utf8.parse(iv.substr(0, 8));if (typeof (word) == 'string') {encode_str = CryptoJS.TripleDES.encrypt(str, crypto_key, {iv: crypto_iv,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7});} else {encode_str = CryptoJS.TripleDES.encrypt(JSON.stringify(str), crypto_key, {iv: crypto_iv,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7});}return encode_str.toString();}//解密function decrypt(str, key, iv) {key = CryptoJS.MD5(key).toString();iv = CryptoJS.MD5(iv).toString();var crypto_key = CryptoJS.enc.Utf8.parse(key);var crypto_iv = CryptoJS.enc.Utf8.parse(iv.substr(0, 8));var decrypt_str = CryptoJS.TripleDES.decrypt(str, crypto_key, {iv: crypto_iv,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7});return decrypt_str.toString(CryptoJS.enc.Utf8);}?后臺代碼
/*** name des加解密* Class Des*/ class Des {/*** @param $data* @param $key* @param $iv* @return false|string*/public static function decrypt($data, $key, $iv){$data = base64_decode($data);$key = md5($key);$iv = substr(md5($iv), 0, 8); //取前8位$decrypted = openssl_decrypt($data, 'des-ede3-cbc', $key, OPENSSL_RAW_DATA, $iv);return $decrypted;}/*** @param $str* @param $key* @param $iv* @return string*/public static function encrypt($str, $key, $iv){$key = md5($key);$iv = substr(md5($iv), 0, 8); //取前8位$data = base64_encode(openssl_encrypt($str, 'des-ede3-cbc', $key, OPENSSL_RAW_DATA, $iv));return $data;}?
總結
以上是生活随笔為你收集整理的php 前后端分离之rsa与des加密之旅的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 001_扎马步_初识hadoop
- 下一篇: 中国白帽黑客调查