c - 此代码是否有资格成为 block 密码

标签 c encryption cryptography block-cipher

好吧,在你们谴责我之前:我知道这是一个可怕的代码和 super 弱的密码。我只是想找出以下是否有资格成为分组密码(即使是非常基本和弱的密码)

int main(){
   int mac = 123;
   int key = 789;

   int enc = mac^key;
   printf("encrypted text  =  %d\n",enc);

   int plain = enc^key;
   printf("decrypted text = %d\n",plain);

   return 0;
}

这是输出:

encrypted text  =  878
decrypted text = 123

最佳答案

为了创建 block 密码,必须遵循某些一般性原则。您显示的代码在技术上不是分组密码。概论如:

  • 在 block 密码中,消息被分成 block 每个然后加密(即像对非常大的字符的替换- 64 位或更多)
  • 分组密码由两个配对算法组成,一个用于加密,E,另一个用于解密,E−1。两种算法都接受两个输入:一个大小为 n 位的输入 block 和一个大小为 k 位的 key ,从而产生一个 n 位输出 block 。对于任何一个固定 key ,解密是加密的逆函数

block 密码模式(ECB、CBC)中的加密使用特定的流程:

  • 分组密码必须做的第一件事是将明文分成大小相同的 block ,通常为 8 个字节,例如 imablock 的 ASCII 编码.
  • 使用密码对明文进行加密。
  • 解密消息。

密码的选择取决于实现。

重点是,虽然您可能遵循了加密-解密流程,但您的程序并不满足 block 密码的一般性。您需要将消息分成 block 实现 symmetric cipher .

您实现的是简单加密而非分组密码

引用了这么多:

希望对您有所帮助。 :)

关于c - 此代码是否有资格成为 block 密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19108352/

相关文章:

c - C 中带有通过 FIFO 管道的指针的结构

c - 如何接受带有整数和带有空格的字符串的输入?

c - 每个 inode 的文件位置?

mysql - 为什么解密函数将所有值都更改为Null?

node.js - 正在运行的nodejs应用程序能否以加密方式证明它与已发布的源代码版本相同?

ruby - Ruby 的 OpenSSL::Random 种子是否足够?

字符 * 与字符 []

php - 用php加密

java - 得到了 org.bouncycaSTLe.jcajce.provider.symmetry.util.BaseBlockCipher$1 : nonce must have length from 7 to 13 octets while decrypt bytes

postgresql - Postgres : How to convert 16 bytes into 4 bytes by XOR-ing every 4 bytes