【10、散列哈希之SHA1加密】

SHA1(英语:Secure Hash Algorithm 1,中文名:安全散列算法1)是一种密码散列函数,美国国家安全局设计,并由美国国家标准技术研究所(NIST)发布为联邦数据处理标准(FIPS)。
SHA-1可以生成一个被称为消息摘要的160位(20字节)散列值,散列值通常的呈现形式为40个十六进制数。
**【SHA-1和SHA-0】
SHA-1和SHA-0的算法只在压缩函数的消息转换部分差了一个比特的循环位移。

【散列之SHA1】

 /**
         * SHA1
         * @param inStr 需要摘要的内容
         * @return
         */
        public static String sha1Encode(String inStr) {
                MessageDigest sha = null;
                try {
                        sha = MessageDigest.getInstance("SHA");
                        byte[] byteArray = inStr.getBytes("UTF-8");
                        byte[] md5Bytes = sha.digest(byteArray);
                        StringBuffer hexValue = new StringBuffer();
                        for (int i = 0; i < md5Bytes.length; i++) {
                                int val = ((int) md5Bytes[i]) & 0xff;
                                if (val < 16) {
                                        hexValue.append("0");
                                }
                                hexValue.append(Integer.toHexString(val));
                        }
                        return hexValue.toString();
                } catch (Exception e) {
                        System.out.println(e.toString());
                        e.printStackTrace();
                        return "";
                }
        }

【散列之SHA1小 demo】
System.out.println("散列之SHA1摘要:"+sha1Encode(str));

13种加密与解密算法【四】

【PS:SHA1同MD5一样,是不可逆的,可以用作文章摘要,作为判别标识】

【11、散列之CRC32加密】

【原理】
CRC检验原理实际上就是在一个p位二进制数据序列之后附加一个r位二进制检验码(序列),从而构成一个总长为n=p+r位的二进制序列;附加在数据序列之后的这个检验码与数据序列的内容之间存在着某种特定的关系。如果因干扰等原因使数据序列中的某一位或某些位发生错误,这种特定关系就会被破坏。因此,通过检查这一关系,就可以实现对数据正确性的检验。
【CRC的本质】
是模-2除法的余数,采用的除数不同,CRC的类型也就不一样。通常,CRC的除数用生成多项式来表示。最常用的CRC码的生成多项式如表1所示。最常用的CRC码及生成多项式名称生成多项式
13种加密与解密算法【四】_第1张图片

【散列之CRC32 小demo】
【PS:散列加密过程不可逆,拿一段文字作为加密内容没有意义,这里使用文件作为内容】

13种加密与解密算法【四】_第2张图片

【散列之 CRC32 加密】

 /**
         * 使用CheckedInputStream计算CRC
         */
        public static Long getCRC32(String filepath) {
                try {
                        CRC32 crc32 = new CRC32();
                        FileInputStream fileinputstream = new FileInputStream(new File(filepath));
                        CheckedInputStream checkedinputstream = new CheckedInputStream(fileinputstream, crc32);
                        while (checkedinputstream.read() != -1) {
                        }
                        checkedinputstream.close();
                        return crc32.getValue();
                }catch (Exception e){
                        e.printStackTrace();
                        return null;
                }
        }
        /**
         * 采用BufferedInputStream的方式加载文件
         */
        public static long bufferedInputStream(String filepath) {
                try {
                        InputStream inputStream = new BufferedInputStream(new FileInputStream(filepath));
                        CRC32 crc = new CRC32();
                        byte[] bytes = new byte[1024];
                        int cnt;
                        while ((cnt = inputStream.read(bytes)) != -1) {
                                crc.update(bytes, 0, cnt);
                        }
                        inputStream.close();
                        return crc.getValue();
                }catch (Exception e){
                        e.printStackTrace();
                        return 0;
                }
        }

【测试小 demo】

 String path = "D:\\huatu.eapx";
 Long ll = getCRC32(path);
 System.out.println("使用CheckedInputStream计算CRC得到:" + ll);
 Long ll1 = bufferedInputStream(path);
 System.out.println("采用BufferedInputStream计算CRC得到:"+ll1);
![](https://s4.51cto.com/images/blog/202004/04/0cbe6d676f3c829013d8bb2ef1d82670.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

13种加密与解密算法【四】

【12、Rabbit】

Rabbit流密码,密钥长度128位,

最大加密消息长度为264 Bytes,即16 TB,若消息超过该长度,则需要更换密钥对剩下的消息进行处理。它是目前安全性较高,加/解密速度比较高效的流密码之一,在各种处理器平台上都有不凡的表现。
【测试小 demo】
略1

【13、Escape】

在很多脚本语言的应用当中,escape函数是一个可转换编码的函数。
比如javascript 中的传递参数?deptName=测试,可先将"测试"用escape重新编码,再进行传递,在服务器端接收后再解码才不会出现乱码。
escape一般用于传递URL参数和类似urlencode base64_encode函数是类似的。详情参见《Web项目中的常用编码》