输出:
Copymd5(a)=0CC175B9C0F1B6A831C399E269772661md5(abc)=900150983CD24FB0D6963F7D28E17F72md5(abc)=900150983CD24FB0D6963F7D28E17F72
2.1 SHA系列算法Secure Hash Algorithm , 是一种与MD5同源的数据加密算法 。SHA算法能计算出一个数位信息所对应到的 , 长度固定的字串 , 又称信息摘要 。而且如果输入信息有任何的不同 , 输出的对应摘要不同的机率非常高 。因此SHA算法也是FIPS所认证的五种安全杂凑算法之一 。原因有两点:一是由信息摘要反推原输入信息 , 从计算理论上来说是极为困难的;二是 , 想要找到两组不同的输入信息发生信息摘要碰撞的几率 , 从计算理论上来说是非常小的 。任何对输入信息的变动 , 都有很高的几率导致的信息摘要大相径庭 。
SHA实际上是一系列算法的统称 , 分别包括:SHA-1、SHA-224、SHA-256、SHA-384以及SHA-512 。后面4中统称为SHA-2 , 事实上SHA-224是SHA-256的缩减版 , SHA-384是SHA-512的缩减版 。各中SHA算法的数据比较如下表 , 其中的长度单位均为位:
类别
SHA-1SHA-224SHA-256SHA-384SHA-512消息摘要长度160224256384512消息长度小于264位小于264位小于264位小于2128位小于2128位分组长度51251251210241024计算字长度3232326464计算步骤数8064648080
SHA-1算法输入报文的最大长度不超过264位 , 产生的输出是一个160位的报文摘要 。输入是按512 位的分组进行处理的 。SHA-1是不可逆的、防冲突 , 并具有良好的雪崩效应 。
上面提到的MessageDigest类同时也支持SHA系列算法 , 使用方式与MD5一样 , 注意SHA不同的类型:
CopyMessageDigest md = MessageDigest.getInstance("SHA");MessageDigest md = MessageDigest.getInstance("SHA-224");MessageDigest md = MessageDigest.getInstance("SHA-384");
2. 对称加密算法#所谓的对称加密 , 意味着加密者和解密者需要同时持有一份相同的密匙 , 加密者用密匙加密 , 解密者用密匙解密即可 。
常用的对称加密算法包括DES算法、AES算法等 。由于对称加密需要一个秘钥 , 而秘钥在加密者与解密者之间传输又很难保证安全性 , 所以目前用对称加密算法的话主要是用在加密者解密者相同 , 或者加密者解密者相对固定的场景 。
对称算法又可分为两类:
第一种是一次只对明文中的单个位(有时对字节)运算的算法称为序列算法或序列密码;
另一种算法是对明文的一组位进行运算 , 这些位组称为分组 , 相应的算法称为分组算法或分组密码 。现代计算机密码算法的典型分组长度为64位――这个长度既考虑到分析破译密码的难度 , 又考虑到使用的方便性 。
2.1 BASE64算法我们很熟悉的BASE64算法就是一个没有秘密的对称加密算法 。因为他的加密解密算法都是公开的 , 所以加密数据是没有任何秘密可言 , 典型的防菜鸟不防程序员的算法 。
BASE64算法作用:
- 用于简单的数据加密传输;
- 用于数据传输过程中的转码 , 解决中文问题和特殊符号在网络传输中的乱码现象 。网络传输过程中如果双方使用的编解码字符集方式不一致 , 对于中文可能会出现乱码;与此类似 , 网络上传输的字符并不全是可打印的字符 , 比如二进制文件、图片等 。Base64的出现就是为了解决此问题 , 它是基于64个可打印的字符来表示二进制的数据的一种方法 。
BASE64的原理比较简单 , 每当我们使用BASE64时都会先定义一个类似这样的数组:
Copy['A', 'B', 'C', ... 'a', 'b', 'c', ... '0', '1', ... '+', '/']
上面就是BASE64的索引表 , 字符选用了"A-Z、a-z、0-9、+、/" 64个可打印字符 , 这是标准的BASE64协议规定 。在日常使用中我们还会看到“=”或“==”号出现在BASE64的编码结果中 , “=”在此是作为填充字符出现 。JDK提供了BASE64的实现:BASE64Encoder , 我们可以直接使用:
Copy//使用base64加密BASE64Encoder encoder = new BASE64Encoder();String encrypt = encoder.encode(str.getBytes());//使用base64解密BASE64Decoder decoder = new BASE64Decoder();String decrypt = new String(decoder.decodeBuffer(encryptStr));
2.2 DESDES (Data Encryption Standard) , 在很长时间内 , 许多人心目中“密码生成”与DES一直是个同义词 。
推荐阅读
- 字节跳动面试必会:快速选择算法,TopK问题最优解
- 大麦茶加山楂干的功效,大麦茶的功效与作用
- 插入排序算法解析
- PC微信逆向:自动保存加密的聊天图片
- 茶叶的功能介绍,茶叶深加工现代先进工艺的特点
- 茶品人品及公民品,热烈庆祝彩农茶再签贵州加盟商
- 让你的太极舞动得更加的流畅
- 淘宝客怎么做推广怎么加入 新开的淘宝店铺,自己怎样推广呢
- 淘宝店如何加入淘宝联盟 淘宝卖家怎么开通淘宝联盟
- iPhone4s怎么样iPhone4s怎么增加内存