文件加密及解密

文章目录

  1. 保护隐私数据不被未授权访问;
    什么是加密
  2. 保护隐私数据不被未授权访问;
  3. 用于隐藏真实数据,进行安全的数据传递;
  4. 避免数据被第三方截获;
  5. 用于隐藏真实数据,进行安全的数据传递;
  6. 避免数据被第三方截获;
    古代加密方式:置换(反序,替换)
    加密算法的历史
    古代加密方式:置换(反序,替换)
    现代加密算法:带密码的加密、两套密码的加密、动态密码加密。
    现代加密:对称加密、非对称加密
    现代加密算法:带密码的加密、两套密码的加密、动态密码加密。
    现代加密:对称加密、非对称加密
  7. 能否通过一个密码进行加密和解密的操作,如果能就是对称加密。
    对称加密
  8. 能否通过一个密码进行加密和解密的操作,如果能就是对称加密。
  9. 对称加密都有密码。
  10. 常用的加密方式DES, AES
  11. 对称加密都有密码。
  12. 常用的加密方式DES, AES
    DES 加密算法
    说明
    DES 通过密码,对数据进行大量循环方式的异或
    操作,从而生成加密后的数据。
    DES对数据依次进行加密,一次加密是8个字节一起
    因此,DES密码,必须是64bit,也就是8个字节
    DES加密实现
  13. DES加密之后的数据,不能够直接生成字符串的;
  14. 加密: M 明文, K 12345678, D 加密后数据
    D = DES(M, K) 用K密码对M进行加密生成D
  15. 解密:M = DES(D, K)
  16. 这种可以通过相同的密码进行加密和解密的叫做对称加密。
    DES API
  17. Cipher 加密/解密引擎,用于实际的处理
  18. cipher.init(int mode, Key key) 设置加密还是解密
  19. Key 对于DES需要使用 SecretKeyFactory 进行密码创建
    创建密码对象用的是 DESKeySpec
  20. Cipher update(byte[]) 每次调用都会返回一部分处理的数据,DES API doFinal 就只能返回最后一次的数据,不是完整的,
  21. DES 加密推荐使用 doFinal 来完成。
    DESede 加密方式
    对于DES 或者 DESede 而言,如果实现DESede的话,那么:Cipher 算法调整为 DESede,SecretKeyFactory制定的算法,同样调整为 DESede, 其中需要使用 DESedeKeySpec 生成密码,而且密码的长度 24个字节。
    AES 加密算法
    特点
  22. 速度快
  23. 强度高
  24. Java中默认支持 AES 128bit 加密
    AES 256bit 美国军方的标准;
    AES 256bit 需要美国出口许可证才可以用。
    DES, AES 特性 - 分块加密
    Padding: 加密的时候,分块是数据按照固定长度一块一块处理,可以通过 Cipher 参数进行分块的控制
    NoPadding:如果数据不是块长度的倍数,那么不会填充
    一般情况下,填充会自动向数据后面添加 字节0 补齐
    AES 常用的Cipher算法
  25. AES 默认可以使用,有时也会出现BadPaddingException,不建议使用
  26. AES/ECB/PKCS5Padding 另外一种AES 加密形式,建议使用
  27. AES/CBC/PKCS5Padding 内部的算法模式不同。
    4.算法及密码长度限制
    算法/模式/填充 16字节加密后数据长度 不满16字节加密后长度
    AES/CBC/NoPadding 16 不支持
    AES/CBC/PKCS5Padding 32 16
    AES/CBC/ISO10126Padding 32 16
    AES/CFB/NoPadding 16 原始数据长度
    AES/CFB/PKCS5Padding 32 16
    AES/CFB/ISO10126Padding 32 16
    AES/ECB/NoPadding 16 不支持
    AES/ECB/PKCS5Padding 32 16
    AES/ECB/ISO10126Padding 32 16
    AES/OFB/NoPadding 16 原始数据长度
    AES/OFB/PKCS5Padding 32 16
    AES/OFB/ISO10126Padding 32 16
    AES/PCBC/NoPadding 16 不支持
    AES/PCBC/PKCS5Padding 32 16
    AES/PCBC/ISO10126Padding 32 16
    AES API
  28. Cipher 加密/解密引擎
  29. 创建密码生成器 KeyGenerator,设置密码生成的密码长度 128 bit和设备安全随机数 ,
    如keyGenerator.init(128, new SecureRandom(password.getBytes()));
    3.生成 SecretKey keyGenerator.generateKey()
  30. 初始化 引擎 cipher.init(Cipher.ENCRYPT_MODE, secretKey)
  31. 加密处理 cipher.doFinal(byte[] origData)
    非对称加密算法
    加密实现
  32. M 明文 D 公钥 E 密钥 C 密文 n 公共模数 0x10001
  33. C = M ^ E mod n
  34. M = C ^ D mod n
  35. 通常 E + n 作为 私钥隐秘保存
  36. 通常 D + n 作为公钥,可以给任何人。
  37. 通过 C ^ D mon => M
  38. E 通过计算两个 1024bit 以上的整数(并且是素数),
    公钥 D = (素数1 - 1) * (素数2 - 1) E 包含两个素数
    D 安全性足够高
    非对称加密的API
  39. Cipher 可以进行加密,用的是 “RSA”, “DSA”
  40. KeyPairGenerator 生成 公钥和私钥
  41. cipher init 加密用 私钥, init 解密 用的是公钥初始化。
    加密实现
  42. M 明文 D 公钥 E 密钥 C 密文 n 公共模数 0x10001
  43. C = M ^ E mod n
  44. M = C ^ D mod n
  45. 通常 E + n 作为 私钥隐秘保存
  46. 通常 D + n 作为公钥,可以给任何人。
  47. 通过 C ^ D mon => M
  48. E 通过计算两个 1024bit 以上的整数(并且是素数),
    公钥 D = (素数1 - 1) * (素数2 - 1) E 包含两个素数
    D 安全性足够高
    非对称加密的API
  49. Cipher 可以进行加密,用的是 “RSA”, “DSA”
  50. KeyPairGenerator 生成 公钥和私钥
  51. cipher init 加密用 私钥, init 解密 用的是公钥初始化。
    Base64、MD5编码
     android.util.Base64类
      encode(byte[],flag)
      encodeToString(byte[],flag) 编码并转换成字符串
      decode(byte[],flag) 解码
      flags标识
       Base64.DEFAULT 默认,如果字符串过长(超过76)时自动在中间加一个换行符,字符串最后也会加一个换行符。可能会导致和其他模块对接时结果不一致,建议使用Base64.NO_WRAP
       Base64.NO_WRAP 不换行处理
       Base64.NO_PADDING 结束位置省略“==”
     it.sauronsoftware.base64.Base64类
      第三方Base64编码、解码工具类
      Base64.decode(byte[]);
      Base64.encode(byte[])
     MD5
      java.security.MessageDigest
      MD5加密:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值