【问题标题】:How to create a SHA-256 hash of a string in Mason code?如何在 Mason 代码中创建字符串的 SHA-256 哈希?
【发布时间】:2018-03-01 13:50:25
【问题描述】:

我正在尝试创建一个字符串的 SHA-256 哈希值 Mason 按照 Stack Overflow 问题的答案 SHA256 digest in perl 并使用 Digest::SHA模块

这些是包含该代码的文件abc.mi 的内容:

use Digest::SHA qw(sha256_hex);
<%init>
    my $message = 'random content';
    my $encryptedMsg = sha256_hex($message);
</%init>

但它抛出以下错误:

Undefined subroutine &Safe::Root0::HTML::Mason::Commands::sha256_hex called

知道为什么即使我在文件本身的开头定义了sha256_hex,它仍将其视为未定义?

这与这是带有扩展名.mi 的梅森代码这一事实有关吗?

========== 编辑 ==========

在浏览了针对此问题发布的答案后,这是我的查询的解决方案。

<%init>
    my $message = 'random content';
    my $encryptedMsg = Digest::SHA::sha256_hex($message);
</%init>

【问题讨论】:

  • 这是评论而不是答案,因为我在猜测。但这是一个非常有根据的猜测,我确信 Mason 标记&lt;%tag&gt; ... &lt;/%tag&gt; 之外的任何内容都会被逐字复制,就像 PHP 一样。我不确定是否可以从 Mason 模板中 use 模块,但即使它有效,它似乎在各方面都是错误的。尝试将 use Digest::SHA qw(sha256_hex) 移动到您的 Perl 代码中。
  • @Borodin:你的假设都是正确的。而且您可以在 Mason 模板中使用 Perl 模块,出于所有显而易见的原因,这是一个糟糕的主意。但这似乎是梅森系统的编写方式。我目前正在开发一个庞大的 Mason 代码库,该代码库为英国最著名的网站之一提供支持。

标签: perl sha mason


【解决方案1】:

在 Mason 中,您的 Perl 代码需要在您的标签中。标签之外的任何内容都只是要包含在输出中的内容。所以你想要这样的东西:

<%init>
  use Digest::SHA qw(sha256_hex);
  my $message = 'random content';
  my $encryptedMsg = sha256_hex($message);
</%init>

【讨论】:

  • 这样做,我之前的错误就消失了。但我现在仍然遇到不同的错误。它说“无法在 @INC 中找到 Digest/SHA.pm”:paste.kde.org/pcm80yyvl
  • @SanjibanBairagya:如果您有新问题,那么您应该在新帖子中提出。但是错误信息很清楚。看起来您的系统上没有安装 Digest::SHA。 Digest::SHA 被添加到 Perl 5.10 的标准 Perl 发行版中。您正在使用 Perl 5.8。我不知道你为什么要使用这么旧的 Perl 版本,但如果你想坚持使用那个版本,那么你需要从 CPAN 安装 Digest::SHA。
  • 好的。我只是直接调用了该函数(一开始没有“使用”),它无需安装任何模块即可工作。感谢您的回答。
猜你喜欢
  • 2012-09-12
  • 2016-07-13
  • 2011-11-02
  • 2011-03-07
  • 1970-01-01
  • 2015-08-21
  • 1970-01-01
  • 2014-08-29
  • 2017-07-18
相关资源
最近更新 更多