总结:php  自带hash mhash 用于散列只能加密   扩展mcrypt 用于加解密 对文件加密有的文件会隐藏换行,或者读取方式等影响导致结果不一致。

1.crc32

php:

a.系统crc32()输入字符串,返回整数(32位),echo输出32位系统会存在不同可能输出负数,64不会。

b.$str=mhash(MHASH_CRC32B, 'abcde');返回4字节的字符串,使用bin2hex($str)转为16进制字符串,hexdec($str)转为十进制输入字符串,返回int型或float型

base_convert($str, 16, 10)输入字符型转换成字符型(此处为from16进制to10进制)。

c.mysql SELECT CRC32('abcde');

2.MD5 SHA1

md5($str) == bin2hex(mhash(MHASH_MD5, $str))
sha1($str) == bin2hex(mhash(MHASH_SHA1, $str))
AND
pack("H*", md5($str)) == mhash(MHASH_MD5, $str)
pack("H*", sha1($str)) == mhash(MHASH_SHA1, $str)

3.加密和散列

下面部分转自:http://jichangxucode.blog.163.com/blog/static/207713391201261910134418/

主要有crypt(),md5(),sha1()这3个函数。还有加密扩展库mcrypt和mhash

1.crypt()(单向加密,安全性较低)

String crypt(String str[,String salt]);

salt参数为加密时使用的干扰串,如果省去,会随机生成一个干扰串,该函数支持4种算法和长度。

2.md5()

String md5(String str[,bool raw_output]);

raw_output参数默认为false,如果为真,函数返回一个二进制形式的密文。

3.sha1()     secure hash algorithm(安全哈希算法)

String sha1(String str[,bool raw_output]);

函数返回一个40位的16进制数,如果raw_output为真,则返回一个20位的2进制数。

Mcrypt库

libmcrypt.dll 到windows(php.ini配置的initDir 目录),然后配置php.ini文件中的extension=libmcrypt.dll;

mcypt支持20多种加密算法和8种加密模式。

mcypt_list_algorithms()和mcypt_list_modes()都返回一个数组,可以用foreach循环出来查看mcypt支持的加密算法和模式。

<?php
$en_dir = mcrypt_list_algorithms() ;
echo "Mcrypt支持的算法有:";
foreach($en_dir as $en_value){
   echo '<br>';
   echo $en_value." ";
}
?>
<?php
$mo_dir = mcrypt_list_modes() ;
echo "<p>Mcrypt支持的加密模式有:";
foreach($mo_dir as $mo_value){
   echo '<br>';
   echo $mo_value." ";
}
?>

输出为:

Mcrypt支持的算法有:
cast-128 
gost 
rijndael-128 
twofish 
arcfour 
cast-256 
loki97 
rijndael-192 
saferplus 
wake 
blowfish-compat 
des 
rijndael-256 
serpent 
xtea 
blowfish 
enigma 
rc2 
tripledes

Mcrypt支持的加密模式有:
cbc 
cfb 
ctr 
ecb 
ncfb 
nofb 
ofb 
stream

应用mcrypt库的一个例子:

<?php
$str = "被加密的内容:相见时难别亦难 东风无力百花残";
$key = "key:111";     //密匙
$cipher = MCRYPT_DES; //加密算法
$modes = MCRYPT_MODE_ECB;//加密模式
$iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher,$modes),MCRYPT_RAND); //初始化向量
echo "加密前:".$str."<p>";
//加密:
$str_encrypt = mcrypt_encrypt($cipher,$key,$str,$modes,$iv);//里面的$cipher,$modes可以不与mcrypt_get_iv_size里的一样
echo "加密后:".$str_encrypt." <p>";
$str_decrypt = mcrypt_decrypt($cipher,$key,$str_encrypt,$modes,$iv);//要跟上面的加密里的$cipher,$modes一样才能还原
echo "还原:".$str_decrypt;
?>

输出:

加密前:被加密的内容:相见时难别亦难 东风无力百花残

加密后: 鞤"猀车摰 D瓇A?Jo鷟?咦N翢? 蟮E6?鄹[p}??

还原:被加密的内容:相见时难别亦难 东风无力百花残

Mhash库

libmash.dll 配置方式同上

mhash支持md5,sha1,crc32等多种散列算法,可以使用mhash_count()和mhash_get_hash_name()输出支持的算法名称。

<?php
$num = mhash_count();          //函数返回最大的hash id
echo "Mhash库支持的算法有:";
for($i = 0; $i <= $num; $i++){
echo '<br>';
echo $i."=>".mhash_get_hash_name($i);    //输出每一个hash id 的名称
}
?>

输出:

Mhash库支持的算法有:
0=>CRC32
1=>MD5
2=>SHA1
3=>HAVAL256
4=>
5=>RIPEMD160
6=>
7=>TIGER
8=>GOST
9=>CRC32B
10=>HAVAL224
11=>HAVAL192
12=>HAVAL160
13=>HAVAL128
14=>TIGER128
15=>TIGER160
16=>MD4
17=>SHA256
18=>ADLER32

mhash应用小例子:

<?php
$filename = '07.txt';
$str = file_get_contents($filename);//获取文件全部内容
$hash = 2;    //The hash id. One of the MHASH_XXX constants.
$password = '111';
$salt = '4444';//干扰串 8字节,小于8字节的用0补齐
$key = mhash_keygen_s2k(1,$password,$salt,10);//生成密钥. 1表示1个MHASH_XXX constant,10表示字节长度
$str_mhash = bin2hex(mhash($hash,$str,$key));//讲2进制转化为16进制,生成16进制的校验码
echo "文件07.txt的校验码是:".$str_mhash;
?>

输出:

文件07.txt的校验码是:d03e414026e6e5f0699e8d66e3a1a1e23caea04f

php crc32,md5,sha1,mhash测试结果的更多相关文章

  1. 用python计算md5,sha1,crc32

    Linux下计算md5sum,sha1sum,crc: 命令 输出 $md5sum hello f19dd746bc6ab0f0155808c388be8ff0  hello $sha1sum hel ...

  2. MD5 SHA1 HMAC HMAC_SHA1区别

    MD5.SHA1.HMAC.HMAC_SHA1区别 引言     什么是MD5,什么是SHA1,如何校验这些Hash.还有拿单个apk文件的MD5,SHA1讯问是不是原版的问题,在这里,让我们先来了解 ...

  3. 文件 MD5 SHA1 SHA256 SHA512 校验码生成工具 V1.3

    [程序介绍]免费开源的 文件 MD5 SHA1 SHA256 SHA512 校验码生成工具 V1.3 这是一个有意思的程序,同一个程序,即是图形程序,又是命令行程序.程序作用:输入一个文件的路径,输出 ...

  4. 【java】之 apache commons-codec 与Apache Digest demo实例,支持md5 sha1 base64 hmac urlencode

    使用commons-codec 进行加密的一些操作 package com.jiepu.ApacheDigest; import java.io.FileInputStream; import org ...

  5. Linux下校验下载文件的完整性(MD5,SHA1,PGP)

    查看: Linux下校验下载文件的完整性(MD5,SHA1,PGP) http://blog.useasp.net/archive/2014/03/29/use-md5-sha1-or-pgp-to- ...

  6. 利用openssl进行BASE64编码解码、md5/sha1摘要、AES/DES3加密解密

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  7. Java 对字符串数据进行MD5/SHA1哈希散列运算

    Java对字符串数据进行MD5/SHA1哈希散列运算 [java] view plain copy package cn.aibo.test; import java.security.Message ...

  8. MD5 SHA1 SHA256 SHA512 SHA1WithRSA 的区别

    MD5 SHA1 SHA256 SHA512 这4种本质都是摘要函数,不通在于长度  MD5 是 128 位,SHA1  是 160 位 ,SHA256  是 256 位,SHA512 是512 位. ...

  9. 加密算法比较3DES AES RSA ECC MD5 SHA1等

    加 密算法通常分为对称性加密算法和非对称性加密算法,对于对称性加密算法,信息接收双方都需事先知道密匙和加解密算法且其密匙是相同的,之后便是对数据进行 加解密了.非对称算法与之不同,发送双方A,B事先均 ...

随机推荐

  1. delphi XE 5 Android 真机调试简易安装教程

    ① FireMonkey[DELPHI XE5]QQ群号:165232328,群内超过1600移动开发爱好者 第一步,打开手机中的USB调试 电脑自动装驱动,但是找不到 去手机官网下载驱动 手动安装驱 ...

  2. js正则表达式

    正则表达式分析页面:https://regexper.com/ 可以很清楚的分析正则,加深理解 var reg=/\bis\b/; 'He is a boy.This is a dog.Where i ...

  3. LINUX下查看日志

    LINUX的日志都在 /var/log 目录下:    进入此文件查看目录详情: 查看某个日志的命令: 1.cat messages可以查看某个日志文件. 2.要达到实时更新,可以通过tail命令查看 ...

  4. 读《编写可维护的JavaScript》第九、十章总结

    第九章 将配置数据从代码中分离出来 9.2 抽离配置数据 这章比较好理解,也非常常见,作者给的俩个例子就能说明一切: // 将配置数据藏在代码中 function validate(value) { ...

  5. Mifare系列7-安全性(转)

    文/闫鑫原创转载请注明出处http://blog.csdn.net/yxstars/article/details/38087245 飞利浦的MIFARE卡 由于它的高安全性在市场上得到广泛应用,比如 ...

  6. Maven 配置 Selenium + testNG + reportNG 运行环境

    .markdown-preview:not([data-use-github-style]) { padding: 2em; font-size: 1.2em; color: rgb(56, 58, ...

  7. zend studio 10破解/汉化

    http://blog.csdn.net/qq1355541448/article/details/16807429

  8. Js Map 实现

    /* * MAP对象,实现MAP功能 * * 接口: * size() 获取MAP元素个数 * isEmpty() 判断MAP是否为空 * clear() 删除MAP所有元素 * put(key, v ...

  9. JQuery_元素样式操作

    元素样式操作包括了直接设置CSS 样式.增加CSS 类别.类别切换.删除类别这几种操作方法.而在整个jQuery 使用频率上来看,CSS 样式的操作也是极高的,所以需要重点掌握.  一.css()方法 ...

  10. 使用Spring Tool Suite创建Maven Web工程

    使用STS或者Eclipse这样的IDE创建Maven Web工程还真不是一般的麻烦! 看了网上不少的方法介绍,操作下来总有区别,不是这里不对就是那里不对. 下面是尝试了几次之后成功的方法,记录一下. ...