我正在尝试实施 SHA-2 加密而不是 SHA-1.

为此,我知道这两种哈希算法之间的位数不同,这让我感到困惑。

如何实现这一目标?我需要在哪些部分进行必要的更改?

我可以使用 Java、Python 和任何其他主要编程语言的任何开源库。

有帮助吗?

解决方案

首先,既不SHA-1或任何有关SHA-2是一个“加密”算法。他们是哈希函数。在SSL,散列函数大多用于完整性,保密性不通过 HMAC 建设。散列函数接受任意长度的输入,并产生一个输出具有固定长度,它是一种“消化”的输入数据的;操作是指不被可逆的。

一个散列函数是“公共”:没有机密数据,无密钥;每个人都可以计算在任何给定的输入散列函数的输出。 A“消息认证码”(MAC)是一种“密钥散列”的:秘密密钥(比特即任意一堆)也是在过程输入,从而使密钥的知识是必要的(重新)计算所述MAC输出。这用于完整性检查(发送者使用的密钥来计算MAC,接收器使用该密钥来重新计算MAC;如果MAC匹配,则该数据是正确的,因为攻击者,不知道密钥,不能有改变的数据,并在改变的数据计算有效的MAC)。

HMAC是一个结构,它把一个散列函数(例如SHA-1)为MAC。 TLS(这是SSL目前,标准名称)使用HMAC。 HMAC的输出,与给定的散列函数的 H被指定时具有比的输出h 相同的尺寸。该输出可以常规截断:HMAC / SHA-1名义上产生一个160位的输出,但按照惯例,在一些协议中,只保留前96位。这种截断不会发生在SSL

FIPS 180-3 标准定义了五个散列函数,命名为SHA-1,SHA-224,SHA-256,SHA-384和SHA-512,分别为160,224,256,384和512位输出的长度。在SHA-224,SHA-256,SHA-384和SHA-512功能被俗称为 “SHA-2”,所以 “SHA-2” 不是一个功能,但四件套哈希函数。

TLS 规范定义的密码套件。加密套件是一组加密算法,该客户端和服务器中的连接(“握手”)的初始阶段时达成一致。间的算法是MAC使用,以确保数据的完整性。一些标准密码套件的指定该MAC应为“HMAC与SHA-256”,即,一些东西,使用的SHA-2的功能之一。

所以回答你的问题是:“只是配置客户端和服务器的加密套件与HMAC / SHA-256的使用的一个”。如果您的SSL实现不支持这样的加密套件,那么你将不得不进行修改,这将需要了解相当深入SSL是如何工作的;阅读和理解了完整RFC 5246将是必要的。

其他提示

hashlib 模块MessageDigest 支持所有 SHA-2 算法。

到目前为止,我所看到的,所有你需要知道的SSL实现SHA256是覆盖在 RFC 5246

但我怀疑你是远不足够的理解加密做到这一点... SHA 2不存在,你正在寻找SHA256,SHA384或SHA512,它是不是一个加密算法,而是加密哈希函数。

那么,什么是你真正想干什么?

我敢肯定你会看到越来越多的这个问题。 GoDaddy的现在提交证书签名请求时,可以指定是否将要使用SHA1或SHA2有一个选项。

这是一个有趣的,虽然在这里阅读。我知道,基本上是有人问及如何强制我的服务器使用的是用一个或另外一个暗号。不知道,我知道的区别是什么或者为什么它会是最好使用一个或另一个,虽然。

试试这个,它的工作原理为WebLogic SQL验证器

 public static void main(String args[]) throws NoSuchAlgorithmException {
 String password="abcdef"; 
 System.out.println("{SHA-1}" + new sun.misc.BASE64Encoder().encode(java.security.MessageDigest.getInstance("SHA1").digest(password.getBytes())));
 }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top