Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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
C中的简单AES函数(不是库)?_C_Algorithm_Aes - Fatal编程技术网

C中的简单AES函数(不是库)?

C中的简单AES函数(不是库)?,c,algorithm,aes,C,Algorithm,Aes,aes的新手。在阅读中,我有点惊讶。我只需要一个函数 char16 *aes128(char16 key, char16 *secrets, int len); 其中char16是一种8*16=128位字符类型。而且,想必,忽略内存泄漏 assert( bcmp( anystring, aes128(anykey, aes128(anykey, anystring, len), len )==0 ); 我正在查看wikipedia上对算法的描述,尽管我可以看到自己犯了足够多的编码错误,花了我

aes的新手。在阅读中,我有点惊讶。我只需要一个函数

char16 *aes128(char16 key, char16 *secrets, int len);
其中char16是一种8*16=128位字符类型。而且,想必,忽略内存泄漏

assert( bcmp( anystring, aes128(anykey, aes128(anykey, anystring, len), len )==0 );
我正在查看wikipedia上对算法的描述,尽管我可以看到自己犯了足够多的编码错误,花了我几天的时间调试自己的实现,但它似乎并不太复杂。大概100行?我确实看到了C语言的版本,比如。这看起来几乎和算法本身一样长。关于stackoverflow的早期建议大多建议在较大的库中使用单个函数,但最好有一个go-to函数来完成此任务,这样就可以编译成代码

那么,AES的实现对于心脏虚弱的人来说太复杂了吗?还是说它相当简短和简单

C实现需要多少行?是否有一个自包含的aes128 C函数已经在某个地方以自由形式存在

另一个问题:每个块是独立编码的吗?据推测,如果第一个块将创建第二个块将使用的salt,那么它将加强加密。这意味着一个块的磁盘损坏会使后续的每个块都不可加密


/根据

仅使用AES函数基本上是不安全的,因为任何块X都将始终使用密钥K编码到块Y,这是太多的信息,无法提供给攻击者。。。根据密码学家的说法

因此,您可以使用某种方法更改每个块的分组密码。可以使用nonce或密码块链接或其他方法。但维基百科上有一个很好的例子,企鹅图片:

因此,简而言之,您可以在一个函数中实现AES,该函数作为分组密码是安全的,但如果您的数据长度超过16字节,则该函数就不安全

此外,AES是相当复杂的,因为所有的圆键。。。我真的不想实现它,特别是在有很多好的实现的情况下,但是我想如果你有一个好的理由去做的话,它也不会那么糟糕


因此,简而言之,要从分组密码构造一个安全的流密码,您需要采取一些策略沿流更改有效密钥。

仅使用AES函数基本上是不安全的,因为任何块X都将始终使用密钥K编码到块Y,密钥K的信息太多,攻击者无法获得。。。根据密码学家的说法

因此,您可以使用某种方法更改每个块的分组密码。可以使用nonce或密码块链接或其他方法。但维基百科上有一个很好的例子,企鹅图片:

因此,简而言之,您可以在一个函数中实现AES,该函数作为分组密码是安全的,但如果您的数据长度超过16字节,则该函数就不安全

此外,AES是相当复杂的,因为所有的圆键。。。我真的不想实现它,特别是在有很多好的实现的情况下,但是我想如果你有一个好的理由去做的话,它也不会那么糟糕


因此,简而言之,要从分组密码构造一个安全的流密码,您需要采取一些策略沿流更改有效密钥。

您没有看到一个像您期望的那样的函数,因为有太多的选项。例如,您描述的块编码机制CBC只是AES加密中的一个选项或模式。有关更多信息,请参见此处:


任何语言的一般经验法则都是:不要重新发明已经做过并且做得很好的东西。这在任何与密码学相关的领域都是如此

你没有看到一个像你期望的那样的函数,因为有太多的选项。例如,您描述的块编码机制CBC只是AES加密中的一个选项或模式。有关更多信息,请参见此处:


任何语言的一般经验法则都是:不要重新发明已经做过并且做得很好的东西。这在任何与密码学相关的领域都是如此

好的,所以我找到了一个合理的独立实现:

大约400行。我可能会用这个


希望它也能帮助其他人。

好的,所以我找到了一个合理的独立实现:

大约400行。我可能会用这个


希望它也能帮助其他人。

谢谢。嗯……有没有人发布了一个小型的独立函数来实现CBC模式,从而减少了问题的一般性和长度?我想要这样做的理由是,我想在一个嵌入式系统中使用它,并且具有最小的移植和学习曲线。我只是需要一些有用的东西。我甚至考虑过使用带种子的序列随机数生成器,然后在执行过程中对字符串进行异或运算……这可能是一个糟糕的想法,但实现起来非常简单。好吧,在维基百科上阅读,不仅使用C标准的rand函数,而且使用更好的mersenne twister仍然是一个不错的选择
坏主意。也许是MTGP,但我又回到了一个需要做工作的世界,我应该把工作留给专家去做……谢谢。嗯……有没有人发布了一个小型的独立函数来实现CBC模式,从而减少了问题的一般性和长度?我想要这样做的理由是,我想在一个嵌入式系统中使用它,并且具有最小的移植和学习曲线。我只是需要一些有用的东西。我甚至考虑过使用带种子的序列随机数生成器,然后在执行过程中对字符串进行异或运算……这可能是一个糟糕的想法,但实现起来非常简单。好吧,在维基百科上阅读,不仅使用C标准rand函数,而且使用更好的mersenne twister仍然是一个坏主意。也许是MTGP,但我回到了一个我需要做的工作应该留给专家的世界……出于安全原因,我不会只使用互联网的任何实现。出于安全原因,我不会只使用互联网的任何实现。