❶ 移動端與後端數據傳輸加密
對稱加密:對稱加密加密與解密使用的是同樣的密鑰,所以速度快,但由於需要將密鑰在網路傳輸,所以安全性不高
非對稱加密:非對稱加密使用了一對密鑰,公鑰與私鑰,所以安全性高,但加密與解密速度慢。
方案:將對稱加密的密鑰使用非對稱加密的公鑰進行加密,然後發送出去,接收方使用私鑰進行解密得到對稱加密的密鑰,然後雙方可以使用對稱加密來進行溝通。
方案的流程介紹:
1、APP客戶端需要和伺服器進行數據交互,它的APP首先生成了一個隨機數作為對稱密鑰(比如AES加密的密鑰)。
2、APP客戶端向伺服器請求公鑰
3、伺服器將公鑰發送給APP客戶端
4、APP客戶端使用伺服器的公鑰將自己的對稱密鑰(比如AES加密的密鑰)加密
5、APP客戶端將加密後的對稱密鑰發送給伺服器
6、伺服器使用私鑰解密得到APP客戶端的對稱密鑰
7、APP客戶端與伺服器可以使用對稱密鑰來對溝通的內容進行加密與解密了
App端和後台數據加密分兩部分:
1.數據傳輸的時候加密 (一般採用Https協議在傳輸層加密)
2.數據本身的加密 (使用各種加密演算法)
RSA非對稱加密:公鑰加密,私鑰解密。公鑰私鑰由服務端生成,公鑰放在客戶端私密保存,私鑰放在服務端。安全性高,運算速度慢
AES對成加密:運算速度快切安全性高
上面網路通信過程是安全的,可以保證通信數據即使被截取了,也無法獲得任何有效信息;即使被篡改了,也無法被客戶端和服務端驗證通過。
具體可參考的博文:(記得後續實踐哦)
https://blog.csdn.net/wangjiang_qianmo/article/details/88073848?utm_medium=distribute.pc_relevant.none-task-blog--1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog--1.channel_param
❷ AES128鍔犺В瀵嗘祦紼嬭︾粏浠嬬粛
鍔犲瘑榪囩▼: AES128鐨勫姞瀵嗕箣鏃呭嬩簬16瀛楄妭鐨勫師濮嬫暟鎹鍜16瀛楄妭鐨勫瘑閽ワ紝棣栧厛灝嗕袱鑰呰瀺鍚堝埌涓涓鎺掑垪鐭╅樀涓銆傛帴鐫錛岄氳繃杞瀵嗛掗鍔狅紙寮傛垨錛夋搷浣滐紝閰嶅悎瀛楄妭浠f浛錛圫鐩掞級鐨勯瓟鏈錛岃岀Щ浣嶄笌鍒楁販娣嗭紙鍥哄畾鐭╅樀錛夌殑宸у欑粍鍚堬紝榪涜10杞榪浠c傛渶鍚庯紝閫氳繃鎵╁睍瀵嗛掗錛圞鐭╅樀鎿嶄綔錛夌敓鎴愪竴涓鍏抽敭妗ユ侊紝紜淇濇暟鎹鐨勫畨鍏ㄨ漿縐匯
鍔犲瘑姝ラよ﹁В錛
瑙e瘑姝ラわ細 涓庡姞瀵嗙浉鍙嶏紝鐢10杞杞瀵嗛掗鍔狅紝姣忔′嬌鐢ㄦ墿灞曞瘑閽ワ紝紜淇濊繕鍘熷姞瀵嗘椂鐨勬瘡涓姝ャ傝В瀵嗘椂錛岃В瀵嗘槑鏂囧湪10杞鍚庢彮鏅擄紝涓斿湪鏈鍚庝竴杞鏃訛紝鍒楁販娣嗙殑鎿嶄綔闇璋冩暣涓洪嗗悜澶勭悊銆
瀹為檯搴旂敤錛 瀵逛簬鏂囦歡鍔犲瘑錛岄櫎浜嗗熀紜鐨勭數瀛愬瘑鐮佹湰錛圗CB錛夛紝鎴戜滑榪樻湁鍏朵粬瀹夊叏閫夐」銆侲CB鉶界劧綆鍗曪紝浣嗘槗鏆撮湶閲嶅嶆ā寮忥紝闇璋ㄦ厧浣跨敤銆傚瘑鐮佸潡閾炬帴錛圕BC錛夐氳繃鍒濆嬪悜閲忛伩鍏嶆ā寮忛棶棰橈紝鏀鎸佸苟琛岃В瀵嗭紝浣嗚В瀵嗘椂瀵歸敊璇鏁忔劅銆傚瘑鏂囧弽棣堬紙CFB錛変互bit涓哄崟浣嶏紝鎻愪緵棰濆栫殑瀹夊叏灞傦紝浣嗚В瀵嗘椂鏈夐噸鏀炬敾鍑婚庨櫓銆
妯″紡璇﹁В錛
鍦ㄦ枃浠跺垎鍧楁椂錛屽彲鑳戒細鐢ㄥ埌濉鍏呮満鍒訛紝濡侼oPadding銆丳KCS#7銆乑erosPadding絳夛紝浠ユ弧瓚蟲暟鎹瀹屾暣鎬с傚悗緇絝犺妭灝嗘繁鍏ユ帰璁ㄨ繖浜涙妧鏈浠ュ強鍙鑳界殑鏀誨嚮鐮磋В絳栫暐銆
❸ 前端使用CryptoJS AES加密 ,後端php解密問題
PHP7.1 已經不能用mcrypt了,所以我用的是openssl_encrypt和openssl_decrypt。
<?php
$data="ThisisanAEScryptdemo.";
$privateKey="";//KEY16位元組用aes-128-cbc,32位元組用aes-256-cbc
$iv="4490d2ded4f2d4ad";//AES的IV是16個位元組
//加密
//$encrypted=openssl_encrypt($data,'aes-128-cbc',$privateKey,0,$iv);
$encrypted=openssl_encrypt($data,'aes-256-cbc',$privateKey,0,$iv);
echo$encrypted,PHP_EOL;
//解密
$encryptedData=$encrypted;
//$decrypted=openssl_decrypt($encryptedData,'aes-128-cbc',$privateKey,0,$iv);
$decrypted=openssl_decrypt($encryptedData,'aes-256-cbc',$privateKey,0,$iv);
echo($decrypted);
輸出結果如下:
EPcMQRXA53/hRkPyILFI4fF/9sW2X53tLiDT26khNsA=
ThisisanAEScryptdemo.
❹ java實現ase加密解密
這個演算法java SDK自帶的額 參考代碼如下:
/**解密
*@paramcontent待解密內容
*@parampassword解密密鑰
*@return
*/
publicstaticbyte[]decrypt(byte[]content,Stringpassword){
try{
KeyGeneratorkgen=KeyGenerator.getInstance("AES");
kgen.init(128,newSecureRandom(password.getBytes()));
SecretKeysecretKey=kgen.generateKey();
byte[]enCodeFormat=secretKey.getEncoded();
SecretKeySpeckey=newSecretKeySpec(enCodeFormat,"AES");
Ciphercipher=Cipher.getInstance("AES");//創建密碼器
cipher.init(Cipher.DECRYPT_MODE,key);//初始化
byte[]result=cipher.doFinal(content);
returnresult;//加密
}catch(NoSuchAlgorithmExceptione){
e.printStackTrace();
}catch(NoSuchPaddingExceptione){
e.printStackTrace();
}catch(InvalidKeyExceptione){
e.printStackTrace();
}catch(IllegalBlockSizeExceptione){
e.printStackTrace();
}catch(BadPaddingExceptione){
e.printStackTrace();
}
returnnull;
}
/**
*加密
*
*@paramcontent需要加密的內容
*@parampassword加密密碼
*@return
*/
publicstaticbyte[]encrypt(Stringcontent,Stringpassword){
try{
KeyGeneratorkgen=KeyGenerator.getInstance("AES");
kgen.init(128,newSecureRandom(password.getBytes()));
SecretKeysecretKey=kgen.generateKey();
byte[]enCodeFormat=secretKey.getEncoded();
SecretKeySpeckey=newSecretKeySpec(enCodeFormat,"AES");
Ciphercipher=Cipher.getInstance("AES");//創建密碼器
byte[]byteContent=content.getBytes("utf-8");
cipher.init(Cipher.ENCRYPT_MODE,key);//初始化
byte[]result=cipher.doFinal(byteContent);
returnresult;//加密
}catch(NoSuchAlgorithmExceptione){
e.printStackTrace();
}catch(NoSuchPaddingExceptione){
e.printStackTrace();
}catch(InvalidKeyExceptione){
e.printStackTrace();
}catch(UnsupportedEncodingExceptione){
e.printStackTrace();
}catch(IllegalBlockSizeExceptione){
e.printStackTrace();
}catch(BadPaddingExceptione){
e.printStackTrace();
}
returnnull;
}
http://blog.csdn.net/hbcui1984/article/details/5201247
圖像界面的話就不說了