美文网首页Android知识技巧总结高级密码学
AES,MD5,RSA,SHA系列等各类加密解读

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

作者: 世外大帝 | 来源:发表于2017-03-20 19:45 被阅读250次

    前言

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

    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只是一种常见的编码方式,不是加密算法!!!

    相关文章

      网友评论

        本文标题:AES,MD5,RSA,SHA系列等各类加密解读

        本文链接:https://www.haomeiwen.com/subject/hrpinttx.html