优选具有java实现的加密算法
我正在寻找一个对称密钥加密方案,将加密我的12字节数据。正如您所看到的,我使用块加密算法不符合64位或128位边界,我不想填充数据,因为我对加密数据的长度有限制。限制是因为我将使用base 32 it转换为一个不能超过20个字符的可打印密钥。纯文本具有非常可预测的数据模式,因此加密方案应该能够隐藏该模式。据我所知,伪随机密钥生成是这个问题的唯一解决方案,但加密数据的解决方案和解密数据的解决方案并不相互通信
你可以在下面搜索框中键入要查询的问题!
我正在寻找一个对称密钥加密方案,将加密我的12字节数据。正如您所看到的,我使用块加密算法不符合64位或128位边界,我不想填充数据,因为我对加密数据的长度有限制。限制是因为我将使用base 32 it转换为一个不能超过20个字符的可打印密钥。纯文本具有非常可预测的数据模式,因此加密方案应该能够隐藏该模式。据我所知,伪随机密钥生成是这个问题的唯一解决方案,但加密数据的解决方案和解密数据的解决方案并不相互通信
# 1 楼答案
您需要/需要一个流密码:http://en.wikipedia.org/wiki/Stream_cipher
# 2 楼答案
为什么不使用RC4?密文与明文的大小完全相同——在您的情况下是12字节。它附带Java(5或更高版本)。以下是一个例子:
这将生成以下输出:
当然,您希望使用比示例中更好(更长、更随机)的键
# 3 楼答案
您可以使用诸如RC4之类的流密码,但正如您所发现的,您不能重用密钥。对于流密码,使用key/nonce(nonce=使用一次的数字)组合。nonce可以像1,2,3,4。。。或日期/时间,需要与密码文本一起存储。在nonce循环舍入为零并开始重复之前更改键。如果使用日期/时间,请确保时钟的滴答声足够快,不会重复某个值
您有一个长期密钥和一个临时密钥。每次要加密某个内容时,将其散列以获取会话密钥:
仅使用此会话密钥一次,然后将其丢弃。存储用于解密的nonce。为下一次使用准备一个数值临时值。对于日期/时间nonce,插入短延迟以确保时钟已更改。下次使用时,当前值必须不同
更改长期密钥时,需要对所有数据进行解密和重新加密。或者,为您的当前密钥选择一个较大的位,并将长期密钥保持在非常安全的状态