❶ 移动端与后端数据传输加密
对称加密:对称加密加密与解密使用的是同样的密钥,所以速度快,但由于需要将密钥在网络传输,所以安全性不高
非对称加密:非对称加密使用了一对密钥,公钥与私钥,所以安全性高,但加密与解密速度慢。
方案:将对称加密的密钥使用非对称加密的公钥进行加密,然后发送出去,接收方使用私钥进行解密得到对称加密的密钥,然后双方可以使用对称加密来进行沟通。
方案的流程介绍:
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
图像界面的话就不说了