1 耗费网络流量:频繁访问服务器会消耗大量的网络流量,这可能会给用户带来不必要的费用,或者占用用户有限的网络带宽。
2 耗电:频繁访问服务器也会增加设备的能耗,缩短设备的电池寿命,从而影响用户体验。
3 压力大:如果你的服务器没有足够的负载能力,不断的请求会使服务器负载过高,可能会导致服务器响应变慢甚至崩溃。
为了避免上述问题,建议在应用中添加控制访问频率的功能,例如使用计时器或者限制网络请求次数。另外,可以将一些数据缓存到本地,减少不必要的网络请求。最重要的是,在服务器端实现合理的缓存和负载均衡,以提高服务器的响应性能和可用性。密码学的三大作用:加密( Encryption)、认证(Authentication),鉴定(Identification)
加密 :防止坏人获取你的数据。
鉴权 :防止坏人假冒你的身份。
认证 :防止坏人修改了你的数据而你却并没有发现。
1 URLEncode和URLDecoder 作用:URLEncode就是将URL中特殊部分进行编码。URLDecoder就是对特殊部分进行解码。
为什么URL要encode原因呢?
url转义其实也只是为了符合url的规范而已。因为在标准的url规范中 中文和很多的字符 是不允许出现在url中的。
2 Base64编码
为什么要进行Base64编码?
在计算机中任何数据都是按ascii码存储的,而ascii码的128~255之间的值是不可见字符。而在网络上交换数据时,比如说从A地传到B地,往往要经过多个路由设备,由于不同的设备对字符的处理方式有一些不同,这样那些不可见字符就有可能被处理错误,这是不利于传输的。所以就先把数据先做一个Base64编码,统统变成可见字符,这样出错的可能性就大降低了。
应用场景:主要是对于二进制数据进行编码,(文件、、加密后的二进制数据)
3 消息认证算法
要确保加密的消息不是别人伪造的,需要提供一个消息认证码(MAC,Message authentication code) 。
消息认证码是带密钥的hash函数,基于密钥和hash函数(单向散列函数)。
密钥双方事先约定,不能让第三方知道。
消息发送者使用MAC算法计算出消息的MAC值,追加到消息后面一起发送给接收者。
接收者收到消息后,用相同的MAC算法计算接收到消息MAC值,并与接收到的MAC值对比是否一样。
消息认证码的作用:检查某段消息的完整性,以及作身份验证。
防止重放 攻击可以有 3 种方法:
序号
每条消息都增加一个递增的序号,并且在计算 MAC 值的时候把序号也包含在消息中。这样攻击者如果不破解消息认证码就无法计算出正确的 MAC 值。这个方法的弊端是每条消息都需要多记录最后一个消息的序号。
时间戳
发送消息的时候包含当前时间,如果收到的时间与当前的不符,即便 MAC 值正确也认为是错误消息直接丢弃。这样也可以防御重放攻击。这个方法的弊端是,发送方和接收方的时钟必须一致,考虑到消息的延迟,所以需要在时间上留下一定的缓冲余地。这个缓冲之间还是会造成重放攻击的可趁之机。
nonce
在通信之前,接收者先向发送者发送一个一次性的随机数 nonce。发送者在消息中包含这个 nonce 并计算 MAC 值。由于每次 nonce 都会变化,因此无法进行重放攻击。这个方法的缺点会导致通信的数据量增加。
4 对称加密算法
特点:加解密只有一个密钥。优点:速度快、效率高。缺点:密钥交换问题。算法:AES(256字节,主流)、DES(8字节,淘汰)。
密钥交换问题如何解决,MAC同样也有这个问题,可以使用非对称加密传输,或者私下约定,密钥管理中心。
5 非对称加密
非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密(这个过程可以做数字签名) 。 非对称加密主要使用的是RSA算法。
特点:公/私钥机制。优点:只需要交换公钥,安全。缺点:加解密速度慢,特别是解密。算法:RSA。应用:数字签名。
数字签名 :
简单解释:
A:将明文进行摘要运算后得到摘要(消息完整性),再将摘要用A的私钥加密(身份认证),得到数字签名,将密文和数字签名一块发给B。
B:收到A的消息后,先将密文用自己的私钥解密,得到明文。将数字签名用A的公钥进行解密后,得到正确的摘要(解密成功说明A的身份被认证了)。
数字证书 :
6 Android端 AES+RSA结合实践
基本流程
Android端
服务器端
基本上如下图所示的流程:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)