2011-11-22 19 views
0

我想为用户提供一个通过对称密码加密一些数据到文件的服务。用户只需提供密钥,并且他/她可以为密码提供初始化矢量。如何分发init。数据通过对称密码加密的矢量?

有没有标准的文件应该是什么样子?使用加密数据填充文件并在对话窗口中显示相应的初始化向量是有意义的。对其他人来说,初始化向量应该与加密数据一起存储在文件中似乎是合理的。

对我来说重要的是结果对用户很有用,他/她也不需要费心调整结果。

感谢您的评论!

回答

2

通常的做法是将IV作为密文文件的第一个块。这样,接收器只将前8个字节(DES)或16个字节(AES)视为IV,其余文件视为实际的密文。

使用与用于密文相同的IV格式:Base64,十六进制,字节数据或其他。

1

如果你的文件中的加密数据一起存储IV你应该罚款...

+0

但是如何?第一行IV和其余的应该是二进制数据? –

+0

@MartyIX ...根据你在那里存储的内容,你可能想要写一些头文件,包含关于文件布局的信息......或者你可以将一切(iv,数据)全部逐字节地转储到文件中。 ..或者你可以使用XML ...无尽的可能性... – DarkSquirrel42

+0

是的,我知道。我只是想知道是否有一个常用的标准。因为如果有的话,我的服务对我的自定义输出实现来说是无用的。用户将无法在他/她的另一个程序中使用它。 –

2

原则上,你可以使用任何你想要的格式,只要程序的解密部知道如何阅读它。为了提高效率,在数据之前使用初始化向量似乎是一个好主意。

如果你想加密文件,一个好主意不是创建你自己的格式(这导致你不得不做这样的决定),而是使用现有的文件格式(这也是一个加密协议)。

我推荐OpenPGP message format, as defined in RFC 4880(或其中的一些子集,如果你不需要所有的功能)。这也有一个好处,即如果你的程序以某种方式停止工作(当然,只有当他们有密钥/密码时),你的客户才能使用任何OpenPGP实现(如pgp或gpg)来解密你的文件。