最后的'='符号表示加密

时间:2013-12-05 16:04:05

标签: encryption

我使用带有ECB密码模式加密的128位Rijndael来转换我的字符串。它格式化某种带有符号===的字符串。

在我的代码中,我需要一些初步决定,这个字符串是加密的。我是否可以建议,如果它在末尾包含=符号,则会加密,或者当我不会在加密字符串中最终得到=符号时可能出现这种情况?

2 个答案:

答案 0 :(得分:2)

首先,如果您使用的是ECB,那么您实际上并不是“加密”,因为它是一种破碎的密码模式(参见:http://bobnalice.wordpress.com/2009/01/28/friends-don%E2%80%99t-let-friends-use-ecb-mode-encryption/

其次,您看到的=符号是Base64填充字符。它们只与加密有关,因为Base64用于任何类型的二进制数据,而不仅仅是加密日期。

第三,你甚至不能依赖于总是出现在Base64数据中的=符号......它仅为某些长度的数据添加(即你可以加密,没有=符号的Base64数据)

答案 1 :(得分:0)

正如@JoelFan指出的那样,那些'='字符是Base64填充,它根本不是加密的一部分,并且如果数据自然地输出到正确数量的字符,则并不总是存在。

你需要添加“带外”的东西。我会用一个具有数据字符串成员的类和一个“加密”标志替换潜在加密的字符串。一旦你在那里,抛出一个getData()方法来检查实例的数据是否被加密,如果是这样,则返回数据的未加密值(并且可以将明文缓存在私有成员中以供日后使用,如果它被访问很多),或者如果没有加密则只返回纯文本。