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

【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));

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

【11、散列之CRC32加密】

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

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

【散列之 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=)

【12、Rabbit】

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

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

【13、Escape】

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

原文地址:https://blog.51cto.com/13479739/2484886

时间: 2024-10-15 22:41:24

13种加密与解密算法【四】的相关文章

15种加密与解密算法【一】

这15种加密解密算法分别是:散列哈希[MD5.SHA1.CRC32],对称[DES,3DES,AES.TDEA,Blowfish,RC4.RC5,IDEA],Base64.Rabbit.Escape.摩尔斯电码.[三种分类]1.对称加密:密钥只有一个,解密.解密都是这个密码,加解密速度快,典型的对称加密有DES.AES.RC4等2.非对称加密:密钥成对出现,分别为公钥和私钥,从公钥无法推知私钥,反之,从私钥也无法推知公钥,加密和解密使用不同的密钥,公钥加密需要私钥解密,反之,私钥加密需要公钥解密

常见的加密和解密算法—AES

一.AES加密概述 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用.经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准.2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一. Rijndae

c++实现加密和解密算法以及JNI技术的应用实例

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86

替换加密、解密算法

替换加密解密算法方案的起源可以追溯到凯撒(Caesar)时代,据说凯撒为了保障情报的可靠性而发明了凯撒密码.凯撒密码是一种简单的置换密码,在加密时,字母表中的每个字母都用其后的第三个字母表示,例如,a用d表示,b用e表示,.......在解密时,只需要执行逆过程即可. 1. 替换加密.解密算法 随这历史的发展,替换密码算法方案已具有很多种形式,主要有以下几种: 单表代替密码算法方案 同音代替密码算法方案 多表代替密码算法方案 多字母组代替密码算法方案 下面以单表代替密码算法方案为例进行介绍. 1

位加密、解密算法

位加密解密算法即将明文信息转化为二进制数据,然后对这些二进制位进行加密便得到密文.位加密算法依托于计算机的强大的位处理能力,在实际应用中非常流行.现代密码学中的很多加密.解密算法方案都依赖于位加密.解密思路,例如,非常流行的序列密码方案. 1. 位加密.解密算法 在java语言中,提供了6种位运算符,如下表所示.在密码学中,可以根据需要来选择合适的位运算符进行加密.解密.一般来说,使用异或运算要比较方便. 位运算 名称 & 按位与(AND) | 按位或(OR) ^ 按位异或(XOR) ~ 取反(

常见的加密和解密算法—MD5

一.MD5加密概述 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.该算法的文件号为RFC 1321(R.Rivest,MIT Laboratory for Computer Science and RSA Data Security Inc. April 1992). MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致.是计算机广泛使用

常见的加密和解密算法—DES

一.DES加密概述 DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来.需要注意的是,在某些文献中,作为算法的DES称为数据加密算法(Data Encryption Algorithm,DEA),已与作为标准的DES区分开来. DES入口参数 DES算法的入口参数有三个:Key.Data.Mode.其中Key为

BASE64,MD5,SHA,HMAC加密與解密算法(java)

package com.ice.webos.util.security; import java.io.UnsupportedEncodingException; import java.math.BigInteger; import java.security.Key; import java.security.MessageDigest; import java.security.SecureRandom; import javax.crypto.Cipher; import javax.c

JAVA实现AES的加密和解密算法

原文 JAVA实现AES的加密和解密算法 import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; /** * AES 是一种可逆加密算法,对用户的敏感信息加密处理 * 对原始数据进行AES加密后,在进行Base6