常⽤的加密解密及编码解码算法
常⽤的加密解密及编码解码算法
今天从Google Reader上发现了⼀篇⽂章, ,写得还算不错,对⾃⼰也有⼀些启⽰。顺便把常⽤的加密及编码算法总结⼀下。
1.常⽤的加密及解密算法
常规加密md5($pass)
32位⼩写:d41d8cd98f00b204e9800998ecf8427e
32位⼤写:D41D8CD98F00B204E9800998ECF8427E
16位⼩写:8f00b204e9800998
16位⼤写:8F00B204E9800998
⼆次加密md5(md5($pass))
32位⼩写:74be16979710d4c4e7c6647856088456
32位⼤写:80404D0C6D24E87F650FF7D1985CD762
16位⼩写:16ae9f6a80547273
16位⼤写:89E12A128CEBC695
md5($pass.$salt) md5($salt.$pass) md5(md5($pass).$salt)
md5(md5($salt).$pass) md5($salt.$pass.$salt) md5($salt.md5($pass))
md5(md5($salt).md5($pass)) md5(md5($pass).md5($salt))
2.md5
Message Digest Algorithm MD5(中⽂名为消息摘要算法第五版)为计算机安全领域⼴泛使⽤的⼀种散列函数,⽤以提供消息的完整性保护。该算法的⽂件号为RFC 1321(R.Rivest,MIT Laboratory for Computer Science and RSA Data Security Inc. April 1992)
在90年代初由MIT Laboratory for Computer Science和RSA Data Security In
c,的Ronald L. Rivest开发出来,经MD2、MD3和MD4发展⽽来。它的作⽤是让⼤容量信息在⽤数字
签名软件签署私⼈密钥前被"压缩"成⼀种保密的格式(就是把⼀个任意长度的字节串变换成⼀定长的⼤整数)。不管是MD2、MD4还是MD5,它们都需要获得⼀个随机长度的信息并产⽣⼀个128位的信息摘要。虽然这些算法的结构或多或少有些相似,但MD2的设计与MD4和MD5完全不同,那是因为MD2是为8位机器做设计优化的,⽽MD4和MD5却是⾯向32位的电脑。这三个算法的描述和c语⾔源代码在Internet RFC 1321中有详细的描述,这是⼀份最权威的⽂档,由Ronald L. Rivest在1992年8⽉向IETF提交。
(PHP 3, PHP 4, PHP 5)
md5 -- Calculate the md5 hash of a string
Description
string md5 ( string str [, bool raw_output] )
Calculates the MD5 hash of str using the RSA Data Security, Inc. MD5 Message-Digest Algorithm, and returns that hash. The hash is a
32-character hexadecimal number. If the optional raw_output is set to TRUE, then the md5 digest is instead returned in raw binary format with a length of 16.
注: The optional raw_output parameter was added in PHP 5.0.0 and defaults to FALSE
3.md5_file
(PHP 4 >= 4.2.0, PHP 5, PECL hash:1.1-1.3)
md5_file — Calculates the md5 hash of a given file
Description
string md5_file ( string $filename [, bool $raw_output=false ] )
Calculates the MD5 hash of the file specified by the filename parameter using the » RSA Data Security, Inc. MD5 Message-Digest Algorithm, and returns that hash. The hash is a 32-character hexadecimal number.
Parameters
filename
The filename
raw_output
When TRUE, returns the digest in raw binary format with a length of 16. Defaults to FALSE.
Return Values
Returns a string on success, FALSE otherwise.
4.sha1
1 SHA1算法简介
安全哈希算法(Secure Hash Algorithm)主要适⽤于数字签名标准(Digital Signature Standard DSS)⾥⾯定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度⼩于2^64位的消息,SHA1会产⽣⼀个160位的消息摘要。当接收到消息的时候,这个消息摘要可以⽤来验证数据的完整性。在传输的过程中,数据很可能会发⽣变化,那么这时候就会产⽣不同的消息摘要。
(PHP 4 >= 4.3.0, PHP 5, PECL hash:1.1-1.3)
sha1 — Calculate the sha1 hash of a string
Description
string sha1 ( string $str [, bool $raw_output=false ] )
Calculates the sha1 hash of str using the » US Secure Hash Algorithm 1.
Parameters
str
The input string.
raw_output
If the optional raw_output is set to TRUE, then the sha1 digest is instead returned in raw binary format with a length of 20, otherwise the returned value is a 40-character hexadecimal number. Defaults to FALSE.
Return Values
Returns the sha1 hash as a string.
5.sha1_file
(PHP 4 >= 4.3.0, PHP 5, PECL hash:1.1-1.3)
sha1_file — Calculate the sha1 hash of a file
Description
string sha1_file ( string $filename [, bool $raw_output=false ] )
Calculates the sha1 hash of filename using the » US Secure Hash Algorithm 1, and returns that hash. The hash is a 40-character hexadecimal number.
Parameters
filename
The filename
raw_output
When TRUE, returns the digest in raw binary format with a length of 20. Defaults to FALSE.
Return Values
Returns a string on success, FALSE otherwise.
<32
CRC校验实⽤程序库在数据存储和数据通讯领域,为了保证数据的正确,就不得不采⽤检错的⼿段。在诸多检错⼿段中,CRC是最著名的⼀种。CRC的全称是循环冗余校验,其特点是:检错能⼒极强,开销⼩,易于⽤编码器及检测电路实现。从其检错能⼒来看,它所不能发现的错误的⼏率仅为0.0047%以下。从性能上和开销上考虑,均远远优于奇偶校验及算术和校验等⽅式。因⽽,在数据存储和数据通讯领域,CRC⽆处不在:著名的通讯协议X.25的FCS(帧检错序列)采⽤的是CRC- CCITT,ARJ、LHA等压缩⼯具软件采⽤的是CRC32,磁盘驱动器的读写采⽤了CRC16,通⽤的图像存储格式GIF、TIFF等也都⽤CRC作为检错⼿段。
(PHP 4 >= 4.0.1, PHP 5)
crc32 — Calculates the crc32 polynomial of a string
Description
int crc32 ( string $str )
在线url网址编码解码
Generates the cyclic redundancy checksum polynomial of 32-bit lengths of the str . This is usually used to validate the integrity of data being transmitted.
Because PHP's integer type is signed, and many crc32 checksums will result in negative integers, you need to use the "%u" formatter of sprintf() or printf() to get the string representation of the unsigned crc32 checksum.
Parameters
str
The data.
Return Values
Returns the crc32 checksum of str as an integer.
6.RSA
RSA算法是第⼀个能同时⽤于加密和数字签名的算法,也易于理解和操作。
RSA是被研究得最⼴泛的公钥算法,从提出到现在已近⼆⼗年,经历了各种攻击的考验,逐渐为⼈们接受,普遍认为是⽬前最优秀的公钥⽅案之⼀。RSA 的安全性依赖于⼤数的因⼦分解,但并没有从理论上证明破译RSA的难度与⼤数分解难度等价。即RSA的重⼤缺陷是⽆法从理论上把握它的保密性能如何,⽽且密码学界多数⼈⼠倾向于因⼦分解不是 NPC问题。
RSA的缺点主要有:A)产⽣密钥很⿇烦,受到素数产⽣技术的限制,因⽽难以做到⼀次⼀密。 B)分组长度太⼤,为保证安全性,n ⾄少也要 600 bits以上,使运算代价很⾼,尤其是速度较慢,较对称密码算法慢⼏个数量级;且随着⼤数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。⽬
前,SET(Secure Electronic Transaction)协议中要求CA采⽤2048⽐特长的密钥,其他实体使⽤1024⽐特的密钥。
这种算法1978年就出现了,它是第⼀个既能⽤于数据加密也能⽤于数字签名的算法。它易于理解和操作,也很流⾏。算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman。
RSA算法是⼀种⾮对称密码算法,所谓⾮对称,就是指该算法需要⼀对密钥,使⽤其中⼀个加密,则需要⽤另⼀个才能解密。
7.对称加密算法
简介:
对称加密算法对称加密算法是应⽤较早的加密算法,技术成熟。在对称加密算法中,数据发信⽅将明⽂(原始数据)和加密密钥⼀起经过特殊加密算法处理后,使其变成复杂的加密密⽂发送出去。收信⽅收到密⽂后,若想解读原⽂,则需要使⽤加密⽤过的密钥及相同算法的逆算法对密⽂进⾏解密,才能使其恢复成可读明⽂。在对称加密算法中,使⽤的密钥只有⼀个,发收信双⽅都使⽤这个密钥对数据进⾏加密和解密,这就要求解密⽅事先必须知道加密密钥。
特点:
对称加密算法的特点是算法公开、计算量⼩、加密速度快、加密效率⾼。
不⾜之处是,交易双⽅都使⽤同样钥匙,安全性得不到保证。此外,每对⽤户每次使⽤对称加密算法时,都需要使⽤其他⼈不知道的惟⼀钥匙,这会使得发收信双⽅所拥有的钥匙数量成⼏何级数增长,密钥管理成为⽤户的负担。对称加密算法在分布式⽹络系统上使⽤较为困难,主要是因为密钥管理困难,使⽤成本较⾼。⽽与公开密钥加密算法⽐起来,对称加密算法能够提供加密和认证却缺乏了签名功能,使得使⽤范围有所缩⼩。在计算机专⽹系统中⼴泛使⽤的对称加密算法有DES和IDEA等。美国国家标准局倡导的AES即将作为新标准取代DES。
具体算法:
3DES算法,Blowfish算法,RC5算法。
8.Base64
Base64是⽹络上最常见的⽤于传输8Bit字节代码的编码⽅式之⼀,⼤家可以查看RFC2045~RFC2049,上⾯有MIME的详细规范。
Base64编码可⽤于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,就采⽤了Base64来将⼀个较长的唯⼀标识符(⼀般为128-bit的UUID)编码为⼀个字符串,⽤作HTTP表单和HTTP GET URL中的参数。在其他应⽤程序中,也常常需要把⼆进制数据编码为适合放在URL(包括隐藏表单域)中的形式。此时,采⽤Base64编码不仅⽐较简短,同时也具有不可读性,即所编码的数据不会被⼈⽤⾁眼所直接看到。
然⽽,标准的Base64并不适合直接放在URL⾥传输,因为URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,⽽这些“%”号在存⼊数据库时还需要再进⾏转换,因为ANSI SQL中已将“%”号⽤作通配符。
为解决此问题,可采⽤⼀种⽤于URL的改进Base64编码,它不在末尾填充'='号,并将标准Base64中的“+”和“/”分别改成了“*”和“-”,这样就免去了在URL编解码和数据库存储时所要作的转换,避免了编码信息长度在此过程中的增加,并统⼀了数据库、表单等处对象标识符的格式。
9.Urlencode
Percent-encoding, also known as URL encoding, is a mechanism for encoding information in a Uniform Resource Identifier (URI) under
certain circumstances. Although it is known as URL encoding it is, in fact, used more generally within the main Uniform Resource Identifier (URI) set, which includes both Uniform Resource Locator (URL) and Uniform Resource Name (URN). As such it is also used in the preparation of data of the "application/x-www-form-urlencoded" media type, as is often used in email messages and the submission of HTML form data in HTTP requests.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论