首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AES Java加密

问AES Java加密
EN

Stack Overflow用户
提问于 2011-01-09 03:25:12
回答 1查看 1.3K关注 0票数 1

我正在用java开发一个移动平台的应用程序。该程序使用Windows C#应用程序中的数据,该应用程序会对移动应用程序将使用的在线数据库中的密码进行加密。

移动应用程序需要连接到数据库并从数据库中检索加密字符串并对其进行解密。

使用以下代码,我可以很好地进行解密

代码语言:javascript
复制
public String decrypt(String encryptedPassword)
    {
        String plainPassword = "";
        try
        {
            SecretKeySpec key = new SecretKeySpec("hcxilkqbbhczfeultgbskdmaunivmfuo".getBytes("US-ASCII"), "AES");

            IvParameterSpec iv = new IvParameterSpec("ryojvlzmdalyglrj".getBytes("US_ASCII"));

            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");

            cipher.init(Cipher.DECRYPT_MODE, key, iv);

            byte[] encoded = cipher.doFinal(Base64.decodeBase64(encryptedPassword.getBytes()));
            plainPassword = new String(encoded);
        }
        catch (Exception ex)
        {
            Log.d("Decryption Error", ex.toString());
        }

        return plainPassword;
    }

解密工作得非常好,所以我使用了与解密相同的代码进行加密,但将密码模式从解密更改为加密。但是,当我将加密的密码打印到控制台时,它会打印大量垃圾,这与应该存储在数据库中的字符串没有任何相似之处。

为了进行加密,我使用了以下代码

代码语言:javascript
复制
public String encrypt(String plainPasword)
    {
        String password = "";
        try
        {
            SecretKeySpec key = new SecretKeySpec("hcxilkqbbhczfeultgbskdmaunivmfuo".getBytes("US-ASCII"), "AES");

            IvParameterSpec iv = new IvParameterSpec("ryojvlzmdalyglrj".getBytes("US_ASCII"));

            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");

            cipher.init(Cipher.ENCRYPT_MODE, key, iv);

            byte[] encoded = cipher.doFinal(plainPasword.getBytes());
            password = new String(encoded);


        }
        catch (Exception ex)
        {
            Log.d("Encryption Error", ex.toString());
        }
        return password;
    }

谢谢你能给我的任何帮助

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-09 03:37:33

在您调用的解密函数中

代码语言:javascript
复制
byte[] encoded = cipher.doFinal(Base64.decodeBase64(encryptedPassword.getBytes()));

因此,您要将ASCII字节转换为Base64字节,然后对其进行解密。

相反,当您实际上只调用

代码语言:javascript
复制
byte[] encoded = cipher.doFinal(plainPasword.getBytes());

您还可以在没有指定编码的情况下从byte[]数组创建新的String(),它使用平台的默认编码,而不是ASCII码。这也可能会破坏一些东西。

如果你看一下cipher.doFinal()返回的被认为是胡言乱语的字节,它们与预期的数据没有任何相似之处吗?

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

https://stackoverflow.com/questions/4635686

复制
相关文章

相似问题

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