node.JS md5加密中文与php结果不一致怎么办

 更新时间:2017年7月6日 23:49  
这次文章要给大家介绍的是node.JS md5加密中文与php结果不一致怎么办,不知道具体解决办法的下面跟小编一起来看看。 因项目需要,需要Node.js与PHP做接口调用,发现nod
这次文章要给大家介绍的是node.JS md5加密中文与php结果不一致怎么办,不知道具体解决办法的下面跟小编一起来看看。

因项目需要,需要Node.js与PHP做接口调用,发现node.js对中文使用md5加密与php对中文md5加密的结果不同。

 

 代码如下复制代码

PHP

<?php

$str='程序员'

echo$str.' md5:'.md5($str);

?>

 

输出:

程序员 md5:72d9adf4944f23e5efde37f6364c126f

node.JS

 

 代码如下复制代码

varcrypto = require('crypto');

  

varmd5 =function(str){

 varcrypto_md5 = crypto.createHash('md5');

 crypto_md5.update(str);

 returncrypto_md5.digest('hex');

}

  

varstr ='程序员'

varresult = str +' md5:'+ md5(str);

console.log(result);

 

输出:

程序员 md5:1b6ad7846ec870e78363d1db4fb2a0ff

经查阅资料发现是编码问题,只要在node.JS中加入编码即可解决问题。

解决方法如下:

 

 代码如下复制代码

varcrypto = require('crypto');

varmd5 =function(str){

 varcrypto_md5 = crypto.createHash('md5');

 crypto_md5.update(str,'utf8');// 加入编码

 returncrypto_md5.digest('hex');

}

varstr ='程序员'

varresult = str +' md5:'+ md5(str);

console.log(result);

输出:

程序员 md5:72d9adf4944f23e5efde37f6364c126f

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助。

php如何查找字符串中第一个非0的位置截取?本文详细介绍了php查找字符串中第一个非0的位置截取的方法,有兴趣的同学快来看看吧
$str = '00000000000000000000000000000000000000001234506';
$preg = '/[0]*/';
$result = preg_replace($preg, '', $str, 1);


小编给大家推荐的这篇文章介绍了php自定义截取中文字符串-utf8版的教程,非常实用,有兴趣的同学快来看看吧。

先说明:网上目前有很多这个问题的代码,但是很多都是复制粘贴,没有自己实践,而且代码有逻辑问题,下面的代码由我自己编写。

话不多说

 

 代码如下复制代码

/**

   * 该函数是对于utf8编码

   * @author [email protected]

   * @param string $str

   * @param int $start

   * @param int $length

   * @return string

   * @copyright 2017年2月27日下午1:46:10

   */

  functiongbsubstr2($str,$start,$length) {

    $length=abs($length);

    $strLen=strlen($str);

    $len=$start+$length;

    $newStr=''

    for($i=$start;$i<$len&&$i<$strLen;$i++) {

      if(ord(substr($str,$i, 1)) > 0xa0) {

        //utf8编码中一个汉字是占据3个字节的,对于其他的编码的字符串,中文占据的字节各有不同,自己需要去修改这个数a

        $newStr.=substr($str,$i, 3);//此处a=3;

        $i+=2;

        $len+= 2;//截取了三个字节之后,截取字符串的终止偏移量也要随着每次汉字的截取增加a-1;

      }else{

        $newStr.=substr($str,$i, 1);

      }

    }

    return$newStr;

  }

 

本文介绍了PHP批量修改文件名称的方法分析,非常实用,有兴趣的同学快来看看吧

在这里我们利用一个战地自己写的一个例子来具体分析一下利用PHP批量修改文件名称的思路和注意事项。

从这个例子里你将会看到,PHP如何判断一个路径是不是目录,如何用PHP取得路径中的文件名称和文件的扩展名,随机函数rand的基本应用,以及这个程序的核心内容递归函数的基本应用。

程序功能:利用PHP目录和文件函数遍历用户给出目录的所有的文件和文件夹,修改文件名称;

首先判断用户给出的目录是不是一个合法目录;

我们这里只是修改狭义的文件名称(不包括目录),所以在程序中一定要判断是不是目录,如果是目录我们就打开这个目录——从而实现遍历目录下的所有文件。如果不是我们就用一个随机的名称修改原来的文件名(用随机数做名称其实不科学,但是这不是我们的重点)。

具体的程序如下:

 

 代码如下复制代码

<?php

//利用PHP目录和文件函数遍历用户给出目录的所有的文件和文件夹,修改文件名称

functionfRename($dirname){

 if(!is_dir($dirname)){

 echo"{$dirname}不是一个有效的目录!";

 exit();

 }

 $handle= opendir($dirname);

 while(($fn= readdir($handle))!==false){

 if($fn!='.'&&$fn!='..'){

  $curDir=$dirname.'/'.$fn;

  if(is_dir($curDir)){

  fRename($curDir);

  }

  else{

  $path=pathinfo($curDir);

  $newname=$path['dirname'].'/'.rand(0,100).'.'.$path['extension'];

  rename($curDir,$newname);

  echo$curDir.'---'.$newname."
";

  }

 }

 }

}

//给出一个目录名称调用函数

fRename('pl');

?>

 

程序分析:

第4行我们用is_dir函数来判断用户给出的目录是不是一个有效的目录名称;因为我们是学习所以写的简单一点如果你要放在服务器上供大家使用的话,你一定要谨慎的验证这个输入数据——例如,这个目录是否允许用户修改等等……

注意函数第9行的判断,必须用全等判断(PHP全等符号===三个等号,不全等!==一个叹号两个等号),否则如果有一个文件名称为0(零),会导致程序意外终止;

第12行,如果读取的文件是一个目录,就在此调用函数本身,实现函数的递归;

注意第16行pathinfo函数的用法,这个函数返回一个拥有三个元素的数组三个元素分别是:

Dirname路径的目录名称,basename路径包含的文件名称 和 extension文件的扩展名,具体这个函数的用法请参看手册相关部分。