AES,MD5,RSA,SHA系列等各类加密解读

前言

今天整理了一下加密方面的工具类,顺便把它们共享出来。

GitHub地址:https://github.com/seeways/AndroidUtils

由于工作原因,经常会用到加密相关的,虽然用过很多次了,但是一直都没有整理过相关资料,整理也是给领导看看,除了常用的,基本都是翻翻以前的代码,或者google。

上周用到了,今天又用到了,所以决心整理一下,方便自己,整理过程中,觉得可能别人也会用到,就顺便扩展了一下,怕众人和我刚开始一样懵逼,所以特写此文,亦是说明。

几种常用加密方式

MD5

  • 广泛使用的散列算法

  • 准确的说,MD5不能算加密算法,但是由于其简单易用性,所以用的人多了,被误传为加密算法的一种。

  • MD5是不可逆的运算。

  • 现在很多可以破解的方法,建议搭配使用。

DES

自从有了AES,DES就每况愈下了,毕竟活了几十年的算法,算是寿终正寝了,不多赘述。

AES

AES加密算法是密码学中的高级加密标准。采用对称分组密码体制,密钥长度的最少支持为128、192、256,分组长度128位,算法应易于各种硬件和软件实现。

  • 用法
    //实例化的时候需要的这个参数通常用很多种模式
    Cipher cipher = Cipher.getInstance(transformation);
    
    • 在实例化Cipher的时候需要转化方式,我使用的一般是AES/CBC/PKCS5Padding,也有很多人用AES/ECB/NoPadding
    • 他们分别代表法算法名称/加密模式/填充方式,也就是说,AES,你也可以直接替换成DES(如果不怕被同事打可以试试)
  • 加密模式
    • 电子密码本模式ECB
    • 加密块链模式CBC
    • 加密反馈模式CFB
    • 输出反馈模式OFB
    • 其中用的最多的是前两种
  • 填充方式
    • NoPadding
    • ZerosPadding
    • PKCS5Padding
    • 其中用的最多的是P5,要选不填充就没意义了
  • 附上十六进制转码
    //十六进制转码
    private static final char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
    
    /**
     * byteArr转hexString
     * <p>例如:</p>
     * bytes2HexString(new byte[] { 0, (byte) 0xa8 }) returns 00A8
     *
     * @param bytes 字节数组
     * @return 16进制大写字符串
     */
    private static String bytes2HexString(byte[] bytes) {
        if (bytes == null) return null;
        int len = bytes.length;
        if (len <= 0) return null;
        char[] ret = new char[len << 1];
        for (int i = 0, j = 0; i < len; i++) {
            ret[j++] = hexDigits[bytes[i] >>> 4 & 0x0f];
            ret[j++] = hexDigits[bytes[i] & 0x0f];
        }
        return new String(ret);
    }
    

SHA系列

常用的安全散列算法

这个主要是给用到数字证书的人群使用的,受信任的证书,一般都是由全国30多家CA办法,其中比较屌的也就那几家,BJCA,GDCA等等,SZCA虽然这几年发展势头不错,但和前几家比起来还有一定差距,这个咱们姑且不管,反正他们都能颁发受信任的证书。

如果你不幸用到,国密标准是在SHA256上改造的,只能帮你到这了,怎么用在工具类中已有说明。

目前工具类中有3中常用的:SHA1SHA256SHA512

RSA系列

  • 非对称加密算法
  • 公钥私钥说的就是它,非常非常非常著名

如果你不幸用到上面的SHA系列了,那么,这个也是你无法避免的。

不过一般私钥需要通过CA办法,不好封装,只是介绍一下。

符合(大天朝)法律的私钥必须通过硬件介质来承载证书,就是我们说的Key,U盾等等。

BASE64

刚在整理资料的时候,看到有的搜索资料上把这个也列上去了,我想说的是,即使是抄,也负点责任好不好?Base64啥时候成加密算法了??

特此说明一下,Base64只是一种常见的编码方式,不是加密算法!!!

    原文作者:世外大帝
    原文地址: https://www.jianshu.com/p/648bac06e663
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞