Java的数据与安全

1.数据安全的要点:防窃听,防篡改,防伪造。

2.古代加密方式:

  1)移位密码:HELLO==>IFMMP

  2)替代密码:HELLO==>P12,5,3

3.现代计算机加密:

  1)建立在严格的数学理论基础上

  2)密码学逐渐发展成一门科学

4.总结

  1)设计一个安全的加密算法非常困难。

  2)验证一个加密算法是否安全更加困难。

  3)当前被认为安全的加密算法仅仅是迄今为止尚未被攻破。

  4)不要自己设计加密算法。

  5)不要自己实现加密算法。

  6)不要自己修改已有的加密算法。

5.URL编码

  1)A~Z,a-z,0-9以及-  _  .  * 保持不变

  2)其他字符以%XX表视:

      a. < :  %3C

      b.  中:%E4%B8%AD(UTF-8: 0xe4b8ad)

   3)Java的数据与安全_第1张图片

   4)URL编码是编码算法,不是加密算法。

   5)URL编码的目的是把任意文本数据编码位%前缀表示的文本,编码后的文本仅包含A~Z,A-Z,0-9,-_.*,%,便于浏览器和服务器处理。

6.Base64编码

   1)什么是Base64:

     a.一种把二进制数据用文本表示的编码算法。

     b.String base64Encode(byte[] data)

         byte[]{0xe4,0xb8,0xad}  ---> "5Lit"

     c.Java的数据与安全_第2张图片

   2)目的

     a.一种用文本(A-Z,A-Z,0-9,+/=)表视二进制内容的方式

     b.适用于文本协议

     c.效率下降

   3)应用:电子邮件协议

   4)如果长度不是3的整数倍:

     a.末尾补0x00或0x00 0x00

     b.编码后加=表视补充了1个字节

     c.编码后加==表示补充了2个字节

   5)Base64是编码算法,不是加密算法

   6)Base64编码的目的是把人以二进制数据编码为文本(长度增加1/3)

   7)其他编码:Base32,Base48,Base58

7.MD5摘要算法

   1)摘要算法(哈希算法/Hash/Digest/数字指纹):

     a.计算任意长度数据的摘要(固定长度)

     b.相同的输入数据始终得到相同的输出

     c.不同的输入数据尽量得到不同的输出

   2)目的:验证原始数据是否被篡改

   3) Java的Object.hashCode()方法就是一个摘要算法

     a.输入:任意数据

     b.输出:固定长度数据(int,byte[4])

     c.相同的输入得到相同的输出: equals/hashCode

     d.碰撞:两个不同的输入得到了相同的输出。

     e.Hash算法的安全性:

       a)碰撞率低

       b)不能猜测输出

       c)输入的任意一个bit的变化会造成输出完全不同

       d)很难从输出反推输入(只能依靠暴力穷举)

   4)常用的摘要算法:

    Java的数据与安全_第3张图片

   5)Java的数据与安全_第4张图片 

   6)用途:验证文件完整性

   7)MD5存储用户口令

     a.系统部存储用户原始口令

     b.系统存储用户原始口令的MD5

     c.如何判断用户口令是否正确:系统计算用户输入的原始口令的MD5并与数据库存储的MD5对比

       a)相同:口令正确

       b)不相同:口令错误

     d.预防彩虹表攻击(对每个口令额外添加随机数salt)

Java的数据与安全_第5张图片

Java的数据与安全_第6张图片

     e.总结:MD5是一种常用的哈希算法,输出128bits/16bytes;常用于验证数据完整性,用于存储口令时需要考虑彩虹表攻击。

8.对称加密算法:

   1)对称加密算法:加密和解密使用同一个密钥(例:WinRAR)

   2) Java的数据与安全_第7张图片

   3)常见的对称加密算法:DES,AES,IDEA,其中DES由于密钥长度过短,容易被短时间暴力破解,所以基本不使用。

   4)密钥长度由算法设计决定,AES的密钥长度是128/192/256

   5)使用256位加密需要修改JDK的policy文件

   6)使用对称加密算法需要制定:算法名称/工作模式/填充模式。

9.如何在不安全的信道上安全的传输密钥

   1)密钥交换算法:Diffie-Hellman算法,简称DH算法。

   2)DH算法没有办法解决中间人攻击。

10.非对称加密算法

   1)非对称加密就是加密和解密使用的不是相同的密钥。

   2)加密:用自己的私钥加密,然后发送给对方,解密:对方用自己的公钥解密

   3)加密:用对方的公钥加密,然后发送给对方,解密:对方用自己的私钥解密

   4)优点:对称加密需要协商密钥,而非对称加密可以安全的公开各自的公钥;可以实现N个人之前的通信

   5)缺点:运算速度慢,不能够防止中间人攻击。

你可能感兴趣的:(Java的数据与安全)