当前位置: 首页 > news >正文

Java 加密解密基础

为什么80%的码农都做不了架构师?>>>   hot3.png

JAVA  加密解密系列

Java 加密解密基础

Java byte数组与十六进制字符串互转

Java BASE64加密解密

Java 加密解密之消息摘要算法(MD5 SHA MAC)

Java 加密解密之对称加密算法DES

Java 加密解密之对称加密算法DESede

Java 加密解密之对称加密算法AES

Java 加密解密之对称加密算法PBE


Java  加密解密基础
密码学是研究编制密码和破译密码的技术科学。研究密码变化的客观规律,应用于编制密码以保守通信秘密的,称为编码学;应用于破译密码以获取通信情报的,称为破译学,总称密码学。
密码学常用术语
明文: 待加密数据。
密文: 明文经过加密后数据。
加密: 将明文转换为密文的过程。
加密算法: 将明文转换为密文的转换算法。
加密密钥: 通过加密算法进行加密操作的密钥。
解密: 将密文转换为铭文的过程。
解密算法: 将密文转换为明文的转换算法。
解密密钥: 通过解密短发进行解密操作的密钥。
密码学分类
1.按时间分
a. 古典密码:以字符为基本加密单元。
b. 现代密码:以信息块为基本加密单元。
2 按保密内容的算法划分
a. 受限制算法:算法的保密性基于保持算法的秘密。
b. 基于密钥算法:算法的保密性基于对密钥的保密。
3. 按密钥体制划分
a. 对称密码体制:也叫单钥或私钥密码体制,加密过程与解密过程使用同一套密钥。对应的算法就是对称加密算法,例如 DES AES
b. 非对称密码体制:也叫双钥或公钥密码体制,加密过程与解密过程使用不同的密钥。对应的算法就是非对称加密算法,例如 RSA
4. 按明文处理方式划分
a. 流密码:也称为序列密码,加密时每次加密一位或者一个字节的明文。例如 RC4 算法。
b. 分组密码:加密时将明文分成固定长度的组,用同一个密钥和算法对每一组进行加密输出也是固定长度的明文。当最后一组大小不满足指定的分组大小时,
有两种处理模式:
无填充模式,直接对剩余数据进行加密,此组加密后大小与剩余数据有关;
有填充模式,对于不满足指定长度分组的进行数据填充;如果恰巧最后一组数据与指定分组大小相同,那么直接添加一个指定大小的分组;填充的最后一个字节记录了填充的字节数。
分组密码工作模式简介
1 .电子密码本模--ECB
将明文的各个分组独立的使用相同的密钥进行加密,这种方式加密时各分组的加密独立进行互不干涉,因而可并行进行。同样因为各分组独立加密的缘故,相同的明文分组加密之后具有相同的密文。该模式容易暴露明文分组的统计规律和结构特征。不能防范替换攻击。
其实照实现来看, ECB 的过程只是把明文进行分组,然后分别加密,最后串在一起的过程。当消息长度超过一个分组时,不建议使用该模式。在每个分组中增加随机位 ( 128 位分组中 96 位为有效明文, 32 位的随机数 ) 则可稍微提高其安全性 , 但这样无疑造成了加密过程中数据的扩张。
优点:
1.简单;
2.有利于并行计算;
3.误差不会被传送;
缺点:
1.不能隐藏明文的模式;
2.可能对明文进行主动攻击;
2.密码分组链接模--CBC
需要一个初始化向量 IV ,第一组明文与初始化向量进行异或运算后再加密,以后的每组明文都与前一组的密文进行异或运算后再加密。IV 不需要保密,它可以明文形式与密文一起传送。
优点:
1.不容易主动攻击,安全性好于ECB,适合传输长度长的报文,是SSL、IPSec的标准。
缺点:
1.不利于并行计算;
2.误差传递;
3.需要初始化向量IV
3. 密文反馈模式--CFB
需要一个初始化向量IV ,加密后与第一个分组明文进行异或运算产生第一组密文,然后对第一组密文加密后再与第二组明文进行异或运算缠身第二组密文,一次类推,直到加密完毕。
优点:
1.隐藏了明文模式;
2.分组密码转化为流模式;
3.可以及时加密传送小于分组的数据;
缺点:
1.不利于并行计算;
2.误差传送:一个明文单元损坏影响多个单元;
3.唯一的IV;
4. 输出反馈模式--OFB
需要一个初始化向量IV ,加密后得到第一次加密数据,此加密数据与第一个分组明文进行异或运算产生第一组密文,然后对第一次加密数据进行第二次加密,得到第二次加密数据,第二次加密数据再与第二组明文进行异或运算产生第二组密文,一次类推,直到加密完毕。
优点:
1.隐藏了明文模式;
2.分组密码转化为流模式;
3.可以及时加密传送小于分组的数据;
缺点:
1.不利于并行计算;
2.对明文的主动攻击是可能的;
3.误差传送:一个明文单元损坏影响多个单元;
5. 计数器模式--CTR
使用计数器,计数器初始值加密后与第一组明文进行异或运算产生第一组密文,
计数器增加,然后,加密后与下一组明文进行异或运算产生下一组密文,以此类推,直到加密完毕
优点:
1.可并行计算;
2.安全性至少与CBC 模式一样好;
3.加密与解仅涉及密码算法的加密;
缺点:
1.没有错误传播,不易确保数据完整性 ;
分组密码填充方式简介
PKCS5 :填充字符串由一个值为 5的字节序列组成,每个字节填充该字节序列的长度。明确定义Block的大小是8位
PKCS7 :填充字符串由一个值为 7的字节序列组成,每个字节填充该字节序列的长度。对于块的大小是不确定的,可以在1-255之间
ISO10126:填充字符串由一个字节序列组成,此字节序列的最后一个字节填充字节序列的长度,其余字节填充随机数据。

转载于:https://my.oschina.net/aub/blog/680847

相关文章:

  • HTML5边玩边学(9):俄罗斯方块就是这么简单 之 数据模型篇
  • PAT (Advanced Level) 1045. Favorite Color Stripe (30)
  • Web安全实践(15)CSRF(跨站请求伪造)-从校内的插入图片说起
  • CCAction
  • Wireshark漫谈(一)
  • 手写数字识别的几种实现方法
  • POJ1015 Jury Compromise(DP)
  • React 的慢与快:优化 React 应用实战
  • required 引发的小小思考
  • Python cos() 函数
  • [数据结构] 冒泡排序
  • NIPT无创产前分析思路
  • xshell、putty远程连接
  • 利用GitHub Pages和Hexo搭建个人博客
  • 为什么Python发展得如此之快?
  • [nginx文档翻译系列] 控制nginx
  • [译]CSS 居中(Center)方法大合集
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • Angular 4.x 动态创建组件
  • CentOS7简单部署NFS
  • emacs初体验
  • Git的一些常用操作
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • leetcode98. Validate Binary Search Tree
  • 服务器从安装到部署全过程(二)
  • 记一次用 NodeJs 实现模拟登录的思路
  • 普通函数和构造函数的区别
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 应用生命周期终极 DevOps 工具包
  • No resource identifier found for attribute,RxJava之zip操作符
  • Java数据解析之JSON
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • (2020)Java后端开发----(面试题和笔试题)
  • (java)关于Thread的挂起和恢复
  • (差分)胡桃爱原石
  • (分布式缓存)Redis持久化
  • (附源码)php新闻发布平台 毕业设计 141646
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (四) 虚拟摄像头vivi体验
  • **python多态
  • .NET MVC第五章、模型绑定获取表单数据
  • .net 获取url的方法
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .NET简谈设计模式之(单件模式)
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • :not(:first-child)和:not(:last-child)的用法
  • [\u4e00-\u9fa5] //匹配中文字符
  • []Telit UC864E 拨号上网
  • [2021]Zookeeper getAcl命令未授权访问漏洞概述与解决
  • [acm算法学习] 后缀数组SA