Java/Flex使用相同密钥加密相同的信息,生成密文不同的解决方法

来源:互联网 发布:人工智能对世界的影响 编辑:程序博客网 时间:2024/05/16 18:53

现在开发的这个系统,用Java构建服务端,Flex构建客户端。这就存在一个问题,即数据传输的安全性,尤其对于敏感的用户名、密码等数据。所以在重要数据传输之前,进行加密。我们采用AES加密算法,服务端和客户端使用相同的密钥进行加密和解密。

本来一切顺利,结果,在调试加密解密数据时出现了问题。使用Java和Flex分别开发服务器端和客户端的数据加/解密程序时,发现使用相同的密钥加密相同的数据,Java程序生成的密文与Flex程序生成的密文不同。这让我非常困惑,按说算法相同得出的结果就应该相同。是哪里出了问题呢?网上查找关于Java/Flex之间加密解密的信息,资料不多,相关的信息更是没有。在无计可施之时,一个偶然的信息给了我一个提示,说是Java加密与IOS开发中相同的算法对密钥数据的格式是不同的。那么会不会Java跟Flex也是类似的问题呢?经过试验,终于发现,Java加密使用字符串密钥,在Flex中需要转换成16进制数,作为密钥。

例如:Java密钥是adkei12D4kf5DKou,那么转换成Flex使用的密钥值是,将该字符串转换成字节数组,然后每一个字节的8位分为高4位和低4位,分别转换成一个16进制数。这样组成的字符串作为Flex端使用的密钥,即61646b6569313244346b6635444b6f75

原创粉丝点击