Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何检查AES算法的有效性?_Algorithm_Validation_Encryption_Aes - Fatal编程技术网

Algorithm 如何检查AES算法的有效性?

Algorithm 如何检查AES算法的有效性?,algorithm,validation,encryption,aes,Algorithm,Validation,Encryption,Aes,我用了一个做AES编码的代码,我用了10多年。问题是我不知道这段代码是否写得很好!该算法是15年前编写的,非常小,只有100行,可以在ios/android/Windows32bit-64bit/MacOs上编译 例如,我在代码中看到: 密码是用MD5散列的,所以在发送到加密算法之前需要16个字节。我当然可以很容易地改变这一部分,但是还可以使用什么算法呢?沙二号 iV用当前时间初始化,然后压缩输出的第一个块就是iV,所以它是公共的。不知道是好是坏 我还需要检查什么 现在,我如何检查输出的有效性以

我用了一个做AES编码的代码,我用了10多年。问题是我不知道这段代码是否写得很好!该算法是15年前编写的,非常小,只有100行,可以在ios/android/Windows32bit-64bit/MacOs上编译

例如,我在代码中看到:

密码是用MD5散列的,所以在发送到加密算法之前需要16个字节。我当然可以很容易地改变这一部分,但是还可以使用什么算法呢?沙二号

iV用当前时间初始化,然后压缩输出的第一个块就是iV,所以它是公共的。不知道是好是坏

我还需要检查什么

现在,我如何检查输出的有效性以了解是否一切都按预期工作

使用一个做AES编码的代码,我已经用了10多年了。问题是我不知道这段代码是否写得很好


这叫做加密。从问题100行开始,我假设你想验证一个使用AES加密的代码,而不是AES加密本身。我写了一本小册子。它主要关注Java,但原则是通用的

密码是用MD5散列的,所以在发送到加密算法之前需要16个字节。我当然可以很容易地改变这一部分,但是还可以使用什么算法呢?沙二号


你的意思是-密码的散列被用作加密密钥吗?我经常看到 如果是这样的话,今天可能还不够。如果密码是由人提供的,且不是长时间的高熵随机数据,那么最好使用一些密码来从密码生成加密密钥

iV用当前时间初始化,然后压缩输出的第一个块就是iV,所以它是公共的。不知道是好是坏

IV需要是唯一的,并且可能是公开的。某些加密模式(如CBC)要求IV为不可预测的随机模式

我还需要检查什么

您可以检查AES实现本身是否由一些成熟的库/框架提供,以防止某些旁道攻击

此外,数据应该经过身份验证、签名、附加哈希、。。为了防止雄性化,它被称为

现在,我如何检查输出的有效性以了解是否一切都按预期工作


好吧,只有你能判断输出是否正确

您可以在与已知实现相同的条件下初始化该算法,并确保两者产生相同的输出。还可以明确停止使用MD5对密码进行散列-只需快速谷歌搜索即可破解MD5散列。使用类似于bcrypt的东西。如果我没弄错的话,你不会担心AES算法本身,而是担心它在你的应用程序中如何使用?@DillonDavis:我知道bcrypt,但是我不想让bcrypt的加密速度变慢,相反,我更愿意让密码更大一些bits@Henry:是的,但是我也有点担心AES算法fs,它写得很好,最终真的像AES必须做的那样编码我假设你想验证一个使用AES加密的代码,而不是AES加密本身。。。不,不,代码本身从0开始进行AES加密,这就是我喜欢它的原因,它很小,简单,没有任何依赖性,可以在所有平台上工作。你的意思是-密码的散列被用作加密密钥吗?我经常看到这是完全正确的,但我不想使用像PBKDF这样的东西来简单地降低密钥生成的速度。相反,我更喜欢强制用户选择最小32字节passwords@loki:要评估AES实现本身对侧通道攻击的抵御能力,您需要大量非常强大的密码学背景知识,并对算法了如指掌。这是一个很好的小实现,我对加密技术很有信心,但无法评估算法是否安全,例如,定时或功耗攻击。你确定这就是你想要的吗?我更喜欢强迫用户选择一个最小32字节的密码,用户肯定会感谢你的。除非您无法保证密码的输入权限较高(例如由密码管理器生成),否则人工输入的密码往往较短,熵较低,且相对容易猜测。PBKDF只是一个减缓暴力的解决方案,不是一个完整的解决方案。不,我的意思是密码在应用程序中是硬编码的,我使用AES只是为了加密应用程序的一些数据,所以我可以选择一个非常硬的密码,当然有人可以分解应用程序,找到pwd,但这是另一个问题