C语言 如何将密码转换为128位/256位WEP密钥?

blpfk2vs  于 11个月前  发布在  其他
关注(0)|答案(3)|浏览(113)

我有一个密码短语,我想从中生成128位或256位WEP密钥。任何指针或链接将有助于如何从纯文本生成WEP密钥。

rjee0c15

rjee0c151#

希望原来的海报已经找到了答案,但我发现这个信息令人震惊很难得到,因为它是超越弃用。正如反复提到的,在这个线程和其他线程中,WEP是非常不安全的,但由于某种原因,没有人愿意给予一个直接的答案,否则,有很多建议去学习其他东西。
对于最初的问题,128位密钥是64字节字符串的MD5散列。这个64字节的字符串是一个ASCII密码短语,它不断重复,然后在64字节处截断。例如,在SQL Server中,这将显示为,

SELECT CAST(HASHBYTES('MD5', LEFT(REPLICATE(@phrase, CEILING(64.0 / LEN(@phrase))), 64)) AS varbinary(13))
brqmpdu1

brqmpdu12#

从阅读Key Derivation Functions开始。高质量的现代KDF是scryptbcryptPBKDF2。它们都有开源实现。
对于PBKDF 2,您可以指定派生密钥的长度。对于scrypt,您可以选择输出的前N位并将其用作密钥。
在不使用KDF的情况下,最直接的方法是将您的密码短语与24位IV(初始化向量)连接起来,并形成RC 4密钥。
请注意,WEP将您的密钥和IV组合在一起,以播种一个RC 4流,该流对数据流进行加密;由于这个原因,WEP具有许多缺点,这使得它不能提供足够的数据保密性。你可以通过维基百科页面链接阅读更多关于它的信息。
不要使用加密哈希作为派生密钥。

iqih9akk

iqih9akk3#

对于其他任何人来说,我想重新生成我们在21世纪初使用的WEP密码,对我来说,有效的方法是重复密码以填充64个字符(没有换行符),然后md5求和以获得结果。我在一个bash脚本中实现了这个测试,使用yes重复密码短语,tr删除yes的换行符,pv将流截断为64 b。然后调用md5sum对结果求和。

#!/bin/bash
read -p passphrase?: -s passphrase
[ -z "$passphrase" ] && echo "Need a passphrase!" && exit
yes $passphrase | tr -d '\n' | pv -s 64 -S | md5sum
unset passphrase

上面成功地吐出了我们在21世纪初使用的WPA PSK,当时提供了我们使用的原始密码。

相关问题