草庐IT

javascript - (不是这样)聪明的 key 导致 Node JS 中的 SHA512 Hmac 出现问题

coder 2024-07-20 原文

这是一个古怪的问题,但我已经为此工作了几个小时,但没有取得太大进展。我希望这里有人可以提供建议...

我正在将脚本从 php 移植到 Node 。 php 脚本使用了这个函数:

hash_hmac('sha512', $text, $key);

我已经使用加密模块在 Node 中复制了这个:

var hash = crypto.createHmac( "sha512", key );
hash.update( text );
return hash.digest( "hex" );

我已经验证,在给定相同的文本和 key 时,这些函数会产生相同的哈希值。

除了...

在 php 中用作键的字符串看起来类似于:(不要问)

define("SITE_KEY", "
                                           __
     ,                                   ,' e`---o
    ((                                  (  | ___,'
     \\~-------------------------------' \_;/
     (                                     /
     /) ._______________________________.  )
    (( (                               (( ( 
     ``-'                               ``-'

");

我试过像这样用 Javascript 重现它:

var key = "\
                                           __\
     ,                                   ,' e`---o\
    ((                                  (  | ___,'\
     \\\\~-------------------------------' \\_;/\
     (                                     /\
     /) ._______________________________.  )\
    (( (                               (( ( \
     ``-'                               ``-'\
\
";

但它不起作用。 (我认为它必须与换行符有关)。

像下面这样用“\r\n”或“\n”替换换行符也不起作用:

var key = "\r\n                                           __\r\n     ,                                   ,' e`---o\r\n    ((                                  (  | ___,'\r\n     \\\\~-------------------------------' \\_;/\r\n     (                                     /\r\n     /) ._______________________________.  )\r\n    (( (                               (( ( \r\n     ``-'                               ``-'\r\n\r\n";

关于如何解决这个问题的建议? (不幸的是,摆脱狗不是一种选择。)

(提前)感谢您的帮助。

最佳答案

为什么不存储 BASE64 编码的字符串?这样您就不必担心换行符、空格等类似问题。

鉴于您的 PHP 代码正在(显然)正确存储 key ,请尝试如下脚本:

<?
$doggy_key = ....;
echo base64_encode($doggy_key);

从命令行运行它,复制编码 key ,然后在您的 javascript 中使用它。 例如,解码 base64 字符串是一个简单的问题; Base64 encoding and decoding in client-side Javascript

关于javascript - (不是这样)聪明的 key 导致 Node JS 中的 SHA512 Hmac 出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15401459/

有关javascript - (不是这样)聪明的 key 导致 Node JS 中的 SHA512 Hmac 出现问题的更多相关文章

  1. C# 到 Ruby sha1 base64 编码 - 2

    我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha

  2. 【Java 面试合集】HashMap中为什么引入红黑树,而不是AVL树呢 - 2

    HashMap中为什么引入红黑树,而不是AVL树呢1.概述开始学习这个知识点之前我们需要知道,在JDK1.8以及之前,针对HashMap有什么不同。JDK1.7的时候,HashMap的底层实现是数组+链表JDK1.8的时候,HashMap的底层实现是数组+链表+红黑树我们要思考一个问题,为什么要从链表转为红黑树呢。首先先让我们了解下链表有什么不好???2.链表上述的截图其实就是链表的结构,我们来看下链表的增删改查的时间复杂度增:因为链表不是线性结构,所以每次添加的时候,只需要移动一个节点,所以可以理解为复杂度是N(1)删:算法时间复杂度跟增保持一致查:既然是非线性结构,所以查询某一个节点的时候

  3. ruby-on-rails - 没有这样的文件或目录 - 用 Mini Magick 识别 - 2

    在我让另一个人重做我的前端UI之前,我的Rails应用程序运行平稳。我已经尝试解决此错误3天了。这是错误:Nosuchfileordirectory-identifyExtractedsource(aroundline#59):575859606162@post=Post.find(params[:id])authorize@postif@post.update_attributes(post_params)flash[:notice]="Postwasupdated."redirect_to[@topic,@post]else{"utf8"=>"✓","_method"=>"patc

  4. ruby-on-rails - Ruby - 如何从 ruby​​ 上的 .pfx 文件中提取公钥、rsa 私钥和 CA key - 2

    我有一个.pfx格式的证书,我需要使用ruby​​提取公共(public)、私有(private)和CA证书。使用shell我可以这样做:#ExtractPublicKey(askforpassword)opensslpkcs12-infile.pfx-outfile_public.pem-clcerts-nokeys#ExtractCertificateAuthorityKey(askforpassword)opensslpkcs12-infile.pfx-outfile_ca.pem-cacerts-nokeys#ExtractPrivateKey(askforpassword)o

  5. ruby-on-rails - 使用 javascript 更改数据方法不会更改 ajax 调用用户的什么方法? - 2

    我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的

  6. ruby-on-rails - 只有当不是 nil 时才执行映射? - 2

    如果names为nil,则以下中断。我怎样才能让这个map只有在它不是nil时才执行?self.topics=names.split(",").mapdo|n|Topic.where(name:n.strip).first_or_create!end 最佳答案 其他几个选项:选项1(在其上执行map时检查split的结果):names_list=names.try(:split,",")self.topics=names_list.mapdo|n|Topic.where(name:n.strip).first_or_create!e

  7. ruby-on-rails - Rails 格式验证——字母数字,但不是纯数字 - 2

    什么是测试格式验证的最佳方法让我们说一个用户名,使用字母数字的正则表达式,但不是纯数字?我一直在我的模型中使用以下验证validates:username,:format=>{:with=>/^[a-z0-9]+[-a-z0-9]*[a-z0-9]+$/i}数字用户名(例如“342”)通过了验证,这是我不想要的。 最佳答案 您想“向前看”一封信:/\A(?=.*[a-z])[a-z\d]+\Z/i 关于ruby-on-rails-Rails格式验证——字母数字,但不是纯数字,我们在Sta

  8. ruby - 强制浏览器下载文件而不是打开文件 - 2

    我要下载http://foobar.com/song.mp3作为song.mp3,而不是让Chrome在其native中打开它浏览器中的播放器。我怎样才能做到这一点? 最佳答案 您只需要确保发送这些header:Content-Disposition:attachment;filename=song.mp3;Content-Type:application/octet-streamContent-Transfer-Encoding:binarysend_file方法为您完成:get'/:file'do|file|file=File.

  9. ruby-on-rails - 在 Ruby 或 Rails 中,hash.merge({ :order => 'asc' }) can return a new hash with a new key. 什么可以返回带有已删除键的新散列? - 2

    在Ruby(或Rails)中,我们可以做到new_params=params.merge({:order=>'asc'})现在new_params是一个带有添加键:order的散列。但是是否有一行可以返回带有已删除key的散列?线路new_params=params.delete(:order)不会工作,因为delete方法返回值,仅此而已。我们必须分3步完成吗?tmp_params=paramstmp_params.delete(:order)returntmp_params有没有更好的方法?因为我想做一个new_params=(params[:order].blank?||para

  10. ruby - 更改 $LOAD_PATH 时,为什么使用 unshift 而不是 push? - 2

    我发现ruby加载路径是一个数组,很多项目都是这样使用的:$:.unshift(File.expand_path("../../lib",__FILE__))可以将本地文件添加到ruby路径数组的前面,方便我们require或者load。所以,我希望知道为什么我们不使用push将文件添加到数组的末尾? 最佳答案 假设您有一个“date.rb”文件(为什么不呢)并且您想要加载这个文件,而不是标准库日期。如果您使用追加,当您调用require'date'时您的文件将永远不会被加载,因为它位于数组的末尾并且标准日期会在之前找到。因此,如果

随机推荐