首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AES算法的奇怪行为

AES算法的奇怪行为
EN

Stack Overflow用户
提问于 2012-05-17 13:04:23
回答 1查看 269关注 0票数 1

Iam使用以下代码加密数据

代码语言:javascript
复制
final SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(),
        "AES");
        final String myIV = "89ABCDEF01234567"; 
        Cipher c = null;
        try {
            try {
                c = Cipher.getInstance("AES/CBC/PKCS5Padding");
            } catch (NoSuchAlgorithmException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (NoSuchPaddingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            c.init(Cipher.ENCRYPT_MODE, keySpec, new IvParameterSpec(
                    myIV.getBytes()));


            byte[] encrypted = c.doFinal(msgfromEB.getBytes(),0,msgfromEB.getBytes().length);

我就是这样说的

代码语言:javascript
复制
c.init(Cipher.DECRYPT_MODE, keySpec, new IvParameterSpec(
                    myIV.getBytes()));  

            byte[] decryptedBytes = c.doFinal(encrypted ,0,encrypted .length);

            System.out.println("decrypted string is"+new String(decryptedBytes));

它是工作的,我能够正确地加密和解密

但是如果我要转换成如下所示的字符串

代码语言:javascript
复制
String myString = new String (encrypted);

再次获得字节数组,如下所示

代码语言:javascript
复制
byte[] newbytearray = myString.getBytes();

现在我正试着解密

代码语言:javascript
复制
c.init(Cipher.DECRYPT_MODE, keySpec, new IvParameterSpec(
                    myIV.getBytes()));  

            byte[] decryptedBytes = c.doFinal(newbytearray ,0,newbytearray .length);

            System.out.println("decrypted string is"+new String(decryptedBytes));

现在我收到一个错误

javax.crypto.IllegalBlockSizeException:解密中的最后一个块不完整

如果我使用base64转换,它工作得很好,但我不想这样做,因为它增加了长度。有没有别的办法来解决这个问题呢?

EN

回答 1

Stack Overflow用户

发布于 2012-05-17 13:39:54

另一种方法是传输字节而不是字符串。

当您使用new String(bytes)时,您要求使用平台的默认编码来将字节和字节序列解释为字符。问题是所有的字节和字节序列并不代表有效的字符。因此,该算法是有损的。这有点像将彩色图片转换为黑白图片,然后尝试从黑白图片转换为彩色图片。它不起作用。因此需要base64。

另一个问题是您没有指定任何显式编码,这意味着如果发送方和接收方不在完全相同的平台上,它们可能会使用不同的编码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10630099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档