zoukankan      html  css  js  c++  java
  • php crc32,md5,sha1,mhash测试结果

    总结: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

  • 相关阅读:
    vsftpd匿名用户实验
    CentOS7 突然连不上网,报错"FailedtostartLSB:Bring up/down networking"
    搭建Java Web开发环境
    Starting named:[FAILED] named启动失败
    CentOS6克隆虚拟机报错Device eth0 does not seem to be present,delaying initialization.
    ADD requires at least two arguments
    mysql 5.7密码策略修改
    JavaScript手册
    vs编译生成之后报错
    vs编译生成之后报错
  • 原文地址:https://www.cnblogs.com/swing07/p/5657381.html
Copyright © 2011-2022 走看看