Java和c ++加密的结果不匹配

jav*_*Man 21 c++ java security base64

我有一个现有的c ++代码,它将加密一个字符串.现在我做了相同的加密. 一些加密的字符串是匹配的.有些是一两个字符不匹配.

我无法弄清楚它为什么会发生.我在调试模式下运行了两个代码,直到它们调用它们的库都具有相同的密钥,salt,iv字符串进行加密.

我知道即使单个字节填充更改也会彻底修改加密字符串.但在这里我只看到一两个角色改变了.这是一个示例(星星之间的粗体字符是错误匹配的部分)

Java的:

U2FsdGVkX18xMjM0NTY3OGEL9nxFlHrWvodMqar82NT53krNkqat0rrgeV5FAJFs1vBsZIJPZ08DJVrQ*Pw*yV15HEoyECBeAZ6MTeN + ZYHRitKanY5jiRU2J0KP0Fzola

C++:

U2FsdGVkX18xMjM0NTY3OGEL9nxFlHrWvodMqar82NT53krNkqat0rrgeV5FAJFs1vBsZIJPZ08DJVrQ*jQ*yV15HEoyECBeAZ6MTeN + ZYHRitKanY5jiRU2J0KP0Fzola

我正在使用AES加密.提供商是SunJCE 1.6版.我尝试将提供商改为Bouncy Castle.即便如此,结果也一样.

添加了一个样本:

C++:

U2FsdGVkX18xMjM0NTY3O*I*/BMu11HkHgnkx + dLPDU1lbfRwb + aCRrwkk7e9dy ++ MK +/94dKLPXaZDDlWlA3gdUNyh/Fxv*oF*STgl3QgpS0XU =

Java的:

U2FsdGVkX18xMjM0NTY3O*D*/BMu11HkHgnkx + dLPDU1lbfRwb + aCRrwkk7e9dy ++ MK +/94dKLPXaZDDlWlA3gdUNyh/Fxv*j9*STgl3QgpS0XU =

更新:

根据评论,我觉得基础64加密是罪魁祸首.我在两个地方使用Latin-1字符集.还有其他我可以检查的东西

Hot*_*cks 7

叹!!

几乎可以肯定的是,在加密数据并以字节字符串形式接收加密数据之后,在通过Base-64转换发送数据之前,您正在对数据进行某种字符转换.

请注意,如果您加密字符串"ABC _ D _ EFG"和"ABC_ G _EFG",加密输出将从第4个字符开始完全不同,并持续到结尾.换句话说,Base-64输出类似于(使用组合值):

U2FsdGVkX18xMj

U2FsdGXt91mJpz

事实上,在上面的例子中,在每种情况下只有两个孤立的Base-64字符(一个字节)混乱,这几乎证明了加密后发生了损坏.

加密过程的输出是字节序列,而不是字符序列.观察到的损坏与将字节错误地解释为字符并尝试对它们执行代码页转换(在将它们馈送到Base-64转换器中)一致.加密器的输出应直接馈入Base-64转换器,无需任何转换.

你说你在两个地方使用"Latin-1字符集",这清楚地表明你正在进行一些你不应该做的转换 - 应该没有必要使用字符集.