【发布时间】:2014-07-21 00:05:07
【问题描述】:
是否有任何安全的散列算法/函数可以提供所有字母和数字,而不仅仅是 0-9、a-f。
所以输出可能包含:0-9、a-z、A-Z 甚至一些符号。
【问题讨论】:
-
您是否有理由寻找一种算法,而不是您使用的任何语言的一些内置类型?
标签: hash language-agnostic passwords
是否有任何安全的散列算法/函数可以提供所有字母和数字,而不仅仅是 0-9、a-f。
所以输出可能包含:0-9、a-z、A-Z 甚至一些符号。
【问题讨论】:
标签: hash language-agnostic passwords
任何哈希算法,真的。
十六进制只是它们的常见表示。查看this code snippet(使用perl,因为你没有标记编程语言):
use Digest::MD5 qw/md5 md5_hex/;
use MIME::Base64;
my $str = 'Foobar';
# Hexadecimal representation
print md5_hex($str),"\n";
# Base64 encoded representation
print encode_base64(md5($str));
输出:
89d5739baabbbe65be35cbe61c88e06d
idVzm6q7vmW+NcvmHIjgbQ==
第一个输出是字符串的 MD5 摘要的十六进制表示;第二个是原始摘要的 Base64 编码表示。
这适用于任何消化算法。然而,它并不影响底层算法实际上的安全程度。
【讨论】:
使用您最喜欢的散列算法/函数并将输出转换为 base64。在 Java 中执行此操作的机制在这里:how to convert hex to base64。
请注意,哈希值仍然相同,但呈现方式会有所不同。如果您有理由想要使用更完整的符号集,也许您可以编辑您的问题。
【讨论】: