我并不是说这是一场辩论,但我正在努力理解为什么这么多应用程序使用SHA1来实现散列机密的技术原理,当SHA512更安全时.也许这仅仅是为了向后兼容.
除了明显更大的尺寸(128个字符对比40个)或轻微的速度差异外,还有其他原因让人们使用前者吗?
此外,我认为SHA-1几年前首先被VCR的处理器破解.有没有人破解512(可能还有吹叶机),或者没有盐腌仍然可以安全使用?
我一直在研究Java String加密技术,遗憾的是我还没有找到任何关于如何在Java中使用SHA-512散列String的好教程.我读了一些关于MD5和Base64的博客,但它们并不像我想的那样安全(实际上,Base64不是加密技术),所以我更喜欢SHA-512.
我想知道我是否可以解释资源的原因或链接,解释为什么SHA512是MD5的优秀哈希算法.
我目前正在使用带盐的SHA256来哈希我的密码.继续使用SHA256还是更改为SHA512会更好吗?
使用.NET和C#我需要使用HMAC SHA512为PHP服务器提供完整性字符串.在C#中使用:
Encoding encoding = Encoding.UTF8;
byte[] keyByte = encoding.GetBytes(key);
HMACSHA512 hmacsha512 = new HMACSHA512(keyByte);
byte[] messageBytes = encoding.GetBytes(message);
byte[] hashmessage = hmacsha512.ComputeHash(messageBytes);
return(ByteToString(hashmessage).toUpper());
Run Code Online (Sandbox Code Playgroud)
但它与PHP hash_hmac()PHP代码不匹配:
$hmac = strtoupper(hash_hmac($pbx_hash, $msg, $binKey));
Run Code Online (Sandbox Code Playgroud)
我尝试用C#(utf8,ASCII,Unicode)改变编码而没有成功.
我已尝试在网上找到很多解决方案,但没有给出相同的字符串:(
我无法更改PHP代码,也看不出C#中的错误
编辑这是ByteToString
(从评论中复制):
static string ByteToString(byte[] buff)
{
string sbinary = "";
for (int i = 0; i < buff.Length; i++)
{
sbinary += buff[i].ToString("X2"); /* hex format */
}
return (sbinary);
}
Run Code Online (Sandbox Code Playgroud)
经过多次发布后,我发现如果PHP hash_hmac键是一个字符串,而不是一个字节数组,我会得到相同的结果.似乎问题出在PHP转换函数$ binKey = pack("H*",$ keyTest);
我正在为我的iPhone应用程序开发登录功能,所以我想使用SHA512散列算法对密码进行散列,然后将结果作为NSString得到(结果应与C#中的SHA512相同).在互联网上花了很多时间后,我仍然没有找到解决方案!:(
有没有人有解决方案和示例代码,请帮助我!非常感谢!
[更新]在我的C#代码中,密码是使用SecureString存储的,所以可能是因为在objective-c和C#之间生成不同的字节数组
SHA384是SHA512的截断版本.但为什么有人会用呢?并且推论:如果SHA384与SHA512一样好,那么使用512位版本有什么理由吗?
我打算使用其中一种算法来验证文件的完整性,所以我主要对colision安全感兴趣.
我很高兴听到任何人在实践中如何使用SHA2摘要,为什么你会选择一个版本而不是另一个版本.
在 .NET 6 代码中,如何对 C# 中的字符串进行 SHA512?
var data = Encoding.UTF8.GetBytes("key");
byte[] hash;
using (SHA512 shaM = new SHA512Managed())
hash = shaM.ComputeHash(data);
Run Code Online (Sandbox Code Playgroud)
引发警告
Warning SYSLIB0021 'SHA512Managed' is obsolete:
'Derived cryptographic types are obsolete.
Use the Create method on the base type instead.'
Run Code Online (Sandbox Code Playgroud)
Visual Studio 2022 不为此提供代码更改。如何在 .NET 6 中用正确的代码替换此代码?
代码从 ASP.NET MVC 控制器调用。
是否有可用于在Linux上计算SHA-512哈希值的标准库或常用库?
我正在寻找一个C或C++库.