我正在看哈希算法,但找不到答案.
谢谢..
更新:
我想澄清一点,我理解散列和加密之间的区别.是什么促使我这样问这个问题的是这篇文章,作者将bcrypt称为"自适应散列"
由于bcrypt基于Blowfish,因此我认为Blowfish是一种哈希算法.如果它的答案已经指出加密,那么在我看来它应该不会在本文中占有一席之地.更糟糕的是,他总结说bcrypt是最好的.现在让我感到困惑的是phpass类(我相信用于密码哈希)使用bcrypt(即河豚,即加密).根据这些新信息,你们告诉我(河豚是加密),这个类听起来不对.我错过了什么吗?
我已经阅读了PHP手册输入中crypt()提供的信息,但我发现自己仍然不确定触发Blowfish算法的salt的格式.
根据手动输入,我应该使用'$ 2 $'或'$ 2a $'作为16个字符串的开头.然而,在以后的例子中,他们使用更长的字符串:" $2a$07$usesomesillystringforsalt$",这表明,我认为任何字符串我提供将切片和切块以适应模型.
我遇到的问题实际上是触发河豚算法中VS STD_DES.例:
$foo = 'foo';
$salt = '$2a$' . hash('whirlpool', $foo); // 128 characters, will be truncated
$hash = crypt($foo, $salt);
// $hash = $26HdMTpoODt6
Run Code Online (Sandbox Code Playgroud)
那哈希显然不是漩涡,事实上STD_DES只有盐的前两个字符用于盐.但是,在PHP手册的例子中,他们的盐以' $2a$07$' 开头,所以如果我将这三个字符添加到相同的代码中,我得到以下内容:
$foo = 'foo';
$salt = '$2a$' . hash('whirlpool', $foo); // 128 characters, will be truncated
$hash = crypt($foo, $salt);
// $hash = $2a$07$b1b2ee48991281a439da2OHi1vZF8Z2zIA.8njYZKR.9iBehxLoIC
Run Code Online (Sandbox Code Playgroud)
我发现我可以提供在此处显示为"人物存在一些差异07$",例如04$和15$两个工作,但01$通过03$不工作(生成一个空字符串),和值等99$,并85$ …
我看过很多关于Blowfish和C#的问题,通常的答案是BouncyCastle.但是,该项目基本上没有文档,我无法找到目录结构,甚至找不到单元测试作为示例.我的意思是,Blowfish被称为Asn1,Bcpg,Crypto(一般来说?),EC,Ocsp,Pkcs还是什么?我缺乏了解源代码中所有缩略词含义的领域知识.
是否有任何有用的文章或博客或成功使用C#BouncyCastle API for Blowfish?我的主要需求是使用Blowfish进行密码散列.
在查看了原始jBCrypt v0.1 C#端口中的一个错误:BCrypt.net(相关问题).我决定将新的jBCrypt代码与旧的C#端口进行比较,以查找差异和潜在问题,如相关问题的错误.
这是我发现的:
// original java (jBCrypt v0.3):
private static int streamtoword(byte data[], int offp[]) {
int i;
int word = 0;
int off = offp[0];
for (i = 0; i < 4; i++) {
word = (word << 8) | (data[off] & 0xff);
off = (off + 1) % data.length;
}
offp[0] = off;
return word;
}
// port to C# :
private static uint StreamToWord(byte[] data, ref int offset)
{
uint word = …Run Code Online (Sandbox Code Playgroud) hash ×3
blowfish ×2
c# ×2
bcrypt ×1
bcrypt.net ×1
bouncycastle ×1
crypt ×1
encryption ×1
jbcrypt ×1
passwords ×1
php ×1
salt ×1
security ×1