Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript PHPass MD5可移植哈希的应用程序脚本实现_Javascript_Wordpress_Hash_Google Apps Script_Md5 - Fatal编程技术网

Javascript PHPass MD5可移植哈希的应用程序脚本实现

Javascript PHPass MD5可移植哈希的应用程序脚本实现,javascript,wordpress,hash,google-apps-script,md5,Javascript,Wordpress,Hash,Google Apps Script,Md5,我正在为谷歌应用程序脚本开发PHPass的一个实现,但我正在为可移植散列变量MD5迭代而挣扎 我们这样做的原因是我们需要能够为大量WordPress站点自动执行常规密码更改。我们需要生成可以直接插入数据库的哈希。因此,我们的实现需要与WordPress实现的每个wp includes/class-phpass.php的可移植哈希100%兼容 问题的关键在于MD5迭代;computeDigest返回字节[],而输入需要字符串,因此以下代码在与PHPass的兼容性方面给出了不理想的结果: funct

我正在为谷歌应用程序脚本开发PHPass的一个实现,但我正在为可移植散列变量MD5迭代而挣扎

我们这样做的原因是我们需要能够为大量WordPress站点自动执行常规密码更改。我们需要生成可以直接插入数据库的哈希。因此,我们的实现需要与WordPress实现的每个wp includes/class-phpass.php的可移植哈希100%兼容

问题的关键在于MD5迭代;computeDigest返回字节[],而输入需要字符串,因此以下代码在与PHPass的兼容性方面给出了不理想的结果:

function genHash_(passwd,settings) {
  var output = '';
  var salt = settings.slice(4,12);
  var count = 1 << itoa64_.indexOf(settings[3]);

  var hash = genMD5_(bin2String_(salt) + passwd);
  do {
    hash = genMD5_(bin2String(hash) + passwd);
  } while (--count);

  output = settings.slice(0,12);
  output += encode64_(hash,16);

  return output;
}

function genMD5_(input) {
  return Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, input);
}

function bin2String_(bin) {
  return String.fromCharCode.apply(String,bin);
}
TRUE会导致md5以原始二进制格式返回结果。PHP字符串是100%二进制兼容的,所以这“很有效”

应用程序脚本实现的问题似乎是,无论你如何处理它,从computeDigest输出到字符串的转换都不起作用。即使您使用fromCharCode填充字符串以获得哈希值,由于unicode转换,使用getCharAt再次转换也会产生不同的结果

因此,我或多或少地得出结论,这是computeDigest的一个限制,因此需要对Google进行更改。但如果有人有任何想法,我认为这个问题值得一提

编辑:有人提到,这可能是与将computeDigest的输出转换为字符串相关的复制。虽然这是类似的,但它不是重复的,因为解决方案要求computeDigest的输出和输入之间具有二进制兼容性


编辑:我已经研究了中建议的使用Blob.getDataAsString的方法,但在转换时也遇到了类似的问题。

可能的重复不是重复,因为它涉及到将二进制兼容哈希反馈到computeDigest函数,而不仅仅是将其转换为字符串。对不起,看起来很相似。另一个有用吗?刚刚尝试了一下,我觉得它看起来有很好的解决方案的潜力,所以谢谢你。不幸的是,它也面临同样的问题——无法获得兼容的哈希。当散列失败时,我会在每次迭代中查看md5的输出。我通过将输出字节[]转换为字符串,然后再转换回来并比较结果来进行测试。结果字节数组的不同之处在于负数错误,我假设这是由于MSB被用作UTF-8/Unicode编码的一部分。无论如何我都不是那方面的专家!我提供的两个链接不能合并吗?使用我可能重复的链接答案处理负数,然后使用我的另一个链接使用blob将其转换为二进制。我也不是专家,也没有多少时间去研究它,但这两个答案在我的s.o.人头指数中都敲响了警钟
$hash = md5($salt . $password, TRUE);
do {
  $hash = md5($hash . $password, TRUE);
} while (--$count);