Encryption SSL加密,SHA-1和SHA-2

Encryption SSL加密,SHA-1和SHA-2,encryption,ssl,sha1,hash-function,sha2,Encryption,Ssl,Sha1,Hash Function,Sha2,我试图实现加密,而不是 因此,我知道这两种哈希算法之间的位数不同,这让我感到困惑 如何实现这一点?我需要在哪些方面进行必要的更改 我可以使用Java、Python和任何其他主要编程语言的任何开源库。并支持所有SHA-2算法。据我所知,在SSL中实现SHA256所需的所有知识都包含在中 但我怀疑你对密码学的理解还远远不够,无法做到这一点。。。SHA 2不存在,您正在查找SHA256、SHA384或SHA512,它不是加密算法,而是加密哈希函数 那么,你到底想做什么呢?首先,SHA-1和与SHA-2

我试图实现加密,而不是

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

如何实现这一点?我需要在哪些方面进行必要的更改


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

并支持所有SHA-2算法。

据我所知,在SSL中实现SHA256所需的所有知识都包含在中

但我怀疑你对密码学的理解还远远不够,无法做到这一点。。。SHA 2不存在,您正在查找SHA256、SHA384或SHA512,它不是加密算法,而是加密哈希函数


那么,你到底想做什么呢?

首先,SHA-1和与SHA-2相关的任何东西都不是“加密”算法。它们是散列函数。在SSL中,通过构造,哈希函数主要用于完整性,而不是机密性。哈希函数接受任意长度的输入,并生成固定长度的输出,这是输入数据的一种“摘要”;该操作是不可逆的

散列函数是“公共的”:没有机密数据,没有密钥;每个人都可以计算任何给定输入的哈希函数输出。“消息认证码”(MAC)是一种“密钥散列”:在该过程中还输入一个密钥(即任意一串位),因此需要了解密钥才能(重新)计算MAC输出。这用于完整性检查(发送方使用密钥计算MAC,接收方使用密钥重新计算MAC;如果MAC匹配,则数据是正确的,因为不知道密钥的攻击者不可能更改数据并在更改的数据上计算有效的MAC)

HMAC是一种将哈希函数(如SHA-1)转换为MAC的结构。TLS(即SSL的当前标准名称)使用HMAC。HMAC的输出与给定的哈希函数h一起使用时,其大小与h的输出相同。该输出可以按惯例截断:HMAC/SHA-1名义上产生160位输出,但在某些协议中,习惯上只保留前96位。这种截断在SSL中不会发生

该标准定义了五个哈希函数,分别命名为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”不是一个函数,而是一个由四个哈希函数组成的家族

该规范定义了密码套件。密码套件是客户机和服务器在连接的初始阶段(“握手”)商定的一组加密算法。算法中包括用于确保数据完整性的MAC。一些标准密码套件规定MAC应为“具有SHA-256的HMAC”,即使用SHA-2功能之一的部件


因此,您的问题的答案是:“只需将客户端和服务器配置为使用HMAC/SHA-256的密码套件之一”。如果您的SSL实现不支持此类密码套件,那么您必须对其进行修改,这将需要非常透彻地理解SSL的工作原理;阅读和理解完整的RFC 5246是必要的。

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


这是一本有趣的书。我基本上知道它在问什么,以及如何强制我的服务器使用使用一个或另一个密码。我不知道到底有什么区别,或者为什么使用其中一个更好。

试试这个,它适用于weblogic SQL Authenticator

 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())));
 }

您对哪种SHA-2算法感兴趣?只要它是SHA-2算法,实际上并不重要:)这与SSL有什么关系?我只是对RFC 5246有点不好的想法。我想这不是一个轻松有趣的阅读之夜吧?