使用pbewithmd5anddes对字符串进行加密,以与java存储的哈希进行比较

vdzxcuhz  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(460)

我正在使用一个应用程序,它将质询响应存储在某种类型的md5散列中。有一个api方法来检查所有的响应是否正确,但是由于某种原因,没有一个方法来检查一个响应,这是我的要求。我不想解密。我只是想用应用程序加密的方法来进行比较。我有一个jce图书馆。恐怕我对加密技术还不太熟悉,所以请帮助一个noob给出一个详细的答案。以下是我从属性文件中收集到的信息:

algorithm=PBEWithMD5AndDES
password=pooface
digest=MD5

示例哈希如下所示:

MD5:MXgxY21tdXR4bjB0:oRu+jlpCO/eSdwMb0iTVbw==

它们都返回md5:<16chars>:<24chars>。任何指导都是有帮助的。提前谢谢。

7jmck4yq

7jmck4yq1#

不是真正的“答案”,但有几点提示:
在没有文档的情况下,您最好对api实现进行反向工程(如果您有,而且是合法的),以了解它在做什么(从原则上讲,您应该能够要求提供api用来散列(或以其他方式)密码的算法的文档,否则它的安全性会受到影响。如果没有:
oru+jlpco/esdwmb0itvbw==是base64编码的二进制文件。如果对其进行base64解码,则得到128位,即md5哈希的大小:0xa11bbe8e5a423bf79277031bd224d56f。
mxgxy21tdxr4bjb0可能是一个salt(即,添加到接收到的密码中以防止字典攻击的内容:md5(“password”)是已知的并且很容易预先计算,而md5(“mxgxy21tdxr4bjb0 password”)不是)。这一点,加上前面的一点,建议您计算salt的md5散列加上其他内容,以产生由base64解码oru产生的128位。。。数据。
pbe代表基于密码的加密,即从密码(在本例中可能是pooface…)生成一个对称密钥(在本例中使用md5),然后使用该密钥用des加密某些东西(可能是加密用户的密码)。请参阅中的“algorithmparameters algorithms”http://docs.oracle.com/javase/7/docs/technotes/guides/security/standardnames.html,和pkcs#5:http://www.emc.com/emc-plus/rsa-labs/standards-initiatives/pkcs-5-password-based-cryptography-standard.htm.
des是块大小为64位的分组密码,因此输出(即密文)将是64位长度的倍数。这有可能直接存储在示例哈希中,但不太可能,尤其是因为这意味着示例哈希行中的“md5”将毫无意义。
我怀疑(但这只是猜测):
使用pbewithmd5和des根据密码“pooface”派生des密钥。
用des密钥加密用户的密码。
用md5对salt和密文进行散列,给出128位的散列输出。
base64对哈希进行编码以得到oru。。。价值观。
其他需要考虑的事项:
salt可以用来派生加密密钥。
加密中可能会用到salt。
您说“challenge response”:这可能意味着身份验证应用程序发明了一个质询(可能是一个随机数),然后让客户机根据这个质询和对一些秘密的了解来计算一些东西。挑战可能是盐(但有几个原因说明情况并非如此)。
在pbe中有两个输入:密码(用于导出加密密钥)和被加密的东西。我假设响应是使用从“pooface”派生的密钥(使用pbe/md5)加密的。这可能是错误的方法:使用质询响应派生一个密钥(使用pbe/md5),并使用它来加密“pooface”。不过,在我看来,这种可能性不大。
大概你可以用一个已知的密码(或者质询响应,或者他们称之为什么)创建你自己的用户,也就是说,你可以提供已知的输入,看看你最终得到了什么输出。从相反的Angular 来看这很有用。在弄清楚加密是怎么回事的时候,我还会用到一些实用程序:
编写一个接受密码并输出des加密密钥的java程序(即实现pbewithmd5anddes)。
熟悉openssl命令,它将根据需要进行md5散列、des加密和base64(en | de)编码。
顺便说一句,现在使用md5和des有点差。。。

相关问题