**17.app后端如何保证通讯安全--aes对称加密

在上文《16.app后端如何保证通讯安全--url签名》提到,url签名有两个缺点,这两个缺点,如果使用对称加密方法的话,则完全可以避免这两个缺点。在本文中,会介绍对称加密的具体原理,和详细的方案,使app通讯更加安全。

1.对称加密的原理

  采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。

  其实很简单,假设有原始数据"1000", 把1000加5就得到密文"1005",得到密文"1005"后减5就得到原始数据"1000"。把原始数据加5就是加密算法,把密文减5就是解密算法,密钥就是5。

  本文所用的是AES这种通用的对称加密算法。

2. api请求中AES算法的应用

  (1)curl简介

  在下面的例子中,会使用curl工具,先简单介绍一下。

  curl是利用URL语法在命令行方式下工作的开源文件传输工具。

  用到的参数:

  -X: 指定什么命令,例如post,get等。

  -H: 指定http header。

  -d: 制定http body的内容

  (2)怎么保证token在初次返回时的安全

  用下面的api返回加密的token

  curl -X POST \

  -H "Token-Param:<时间戳>,<sdkversion>"\

  -d  ‘Base64Encode(AES(token, secretKey))’

  http://test.com/api/login

  secretKey就是密钥,使用http header中的Token-Param中的16位长度。

  服务端返回时加密token的方法是用AES加密,密钥是secretKey。

  客户端解密token的方法是用AES解密,密钥是secretKey。

  (3) api请求中的加密

  假设更新用户数据的api调用如下

  curl -X POST \

  -H "Token-Param:<时间戳>,<sdkversion>"\

  -H  ‘Token:Base64Encode(AES(token, secretKey))’

  -d  ‘Base64Encode(AES(date, token))’

  http://test.com/api/user/update

  secretKey使用http header中的Token-Param中的16位长度。

  在上面的例子中,data是实际要post的数据。

  在这个过程中,token和post的数据都得到了加密保护。

  客户端发送时加密的过程

  (1)取http header中的Token-Param中的16位长度作为密钥,用AES加密token。

  (2)用token作为密钥,用AES加密data。

  服务端接收到这个api请求的解密过程:

  (1)取http header中的Token-Param中的16位长度作为密钥,用AES解密, 得到token。

  (2)用token作为密钥,用AES解密http body的内容,得到原文。

3.对称加密方法的总结

  把token返回的时候,可以做个约定,在返回的时候截取某个字符串的一部分作为密钥,这个秘钥只用一次,就是用来解密token的,以后就只是用token来做秘钥了。

http://blog.csdn.net/newjueqi/article/details/44177063

时间: 2024-08-08 09:40:25

**17.app后端如何保证通讯安全--aes对称加密的相关文章

16.app后端如何保证通讯安全--url签名

app和后端的通讯过程中,api请求有可能被别人截取或不小心泄露.那么,怎么保证api请求的安全呢?在这篇文章中,介绍一种常见的保证api请求安全的做法--url签名. 1. url签名详解 在前一篇文章<15.app后端怎么设计用户登录方案>中,服务器中验证用户名和密码都正确后,生成一个随机的不重复的token字符串(例如"daf32da456hfdh"),在redis或memcache中维护一个映视表,建立token字符串和用户信息的对应关系表,例如,把token字符串

正确使用AES对称加密

正确使用AES对称加密 经常我看到项目中有人使用了对称加密算法,用来加密客户或项目传输中的部分数据.但我注意到开发 人员由于不熟悉原理,或者简单复制网上的代码示例,有导致代码存在安全风险. 我经常遇到的问题,有如下: 如使用了过时的加密算法(如DES) 设置了不安全的加密模式(ECB) 不正确地处理初始向量(IV) 对称加密算法 算法 位长 建议 RC4 40 DES 56 3DES 112 AES 128 ? TL;DR: RC4/DES/3DES都 不符合 加密/破解的安全性要求. DES是

JAVA中AES对称加密和解密

AES对称加密和解密 package demo.security; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.util.Ba

AES对称加密和解密

package demo.security; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.util.Base64; impor

基于AES对称加密解密的代码块

提供此代码方便自己以后直接查询用,也可以方便其他朋友直接拿来用. 1 import javax.crypto.Cipher; 2 import javax.crypto.spec.IvParameterSpec; 3 import javax.crypto.spec.SecretKeySpec; 4 import sun.misc.BASE64Decoder; 5 import sun.misc.BASE64Encoder; 6 /** 7 * <p>标题: 对称加密解密AES</p&g

JDK自带方法实现AES对称加密

请看代码. 1 package jdbc.pro.lin; 2 3 import java.security.InvalidAlgorithmParameterException; 4 import java.security.InvalidKeyException; 5 import java.security.NoSuchAlgorithmException; 6 7 import javax.crypto.BadPaddingException; 8 import javax.crypto

AES对称加密util

package cn.com.qmhd.oto.common; import java.security.Key; import java.security.NoSuchAlgorithmException; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import com.a

python AES对称加密

1.首先需要安装第三方库 pip install pycryptodome 2.实例代码,亲测可用 # coding:utf-8 import base64 from Crypto.Cipher import AES class USE_AES: """ AES 除了MODE_SIV模式key长度为:32, 48, or 64, 其余key长度为16, 24 or 32 详细见AES内部文档 CBC模式传入iv参数 本例使用常用的ECB模式 """

iOS系统方法进行AES对称加密

此方法采用kCCAlgorithmAES128,kCCOptionPKCS7Padding,kCCOptionECBMode,kCCBlockSizeAES128模式.如果另有其他模式需求加上即可! 废话不多说,直接上代码: 头文件: [objc] view plaincopyprint? #import <Foundation/Foundation.h> #import <CommonCrypto/CommonCryptor.h> @class NSString; @interf