java - 在android上解码加密信息

标签 java android security random

我正在尝试将一些信息从 1 个 Web 应用程序发送到 Android 应用程序,但是这些信息必须在 Web 应用程序中加密存储。 为此,我尝试使用对称 key 来加密 Web 应用程序中的数据,并使用相同的 key 在应用程序中对其进行解密。

以下是我在服务器上生成加密数据的代码:

String key = "someData";

    SecretKeySpec sks = null;
    try {
        SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
        sr.setSeed("exSeed".getBytes());
        KeyGenerator kg = KeyGenerator.getInstance("AES");
        kg.init(128, sr);
        sks = new SecretKeySpec((kg.generateKey()).getEncoded(), "AES");
    } catch (Exception e) {
    }

    byte[] encodedBytes = null;
    try {
        Cipher c = Cipher.getInstance("AES");
        c.init(Cipher.ENCRYPT_MODE, sks);
        encodedBytes = c.doFinal(key.getBytes());
    } catch (Exception e) {
    }
    jTextField5.setText(Base64.encode(encodedBytes));

以下是我在应用程序中读取数据的代码:

    SecretKeySpec sks = null;
    try {
        SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
        sr.setSeed("exSeed".getBytes());
        KeyGenerator kg = KeyGenerator.getInstance("AES");
        kg.init(128, sr);
        sks = new SecretKeySpec((kg.generateKey()).getEncoded(), "AES");
    } catch (Exception e) {
        Log.e(TAG, "AES secret key spec error");
    }

    byte[] decodedBytes = null;
    try {
        Cipher c = Cipher.getInstance("AES");
        c.init(Cipher.DECRYPT_MODE, sks);
        decodedBytes = c.doFinal(key);
    } catch (Exception e) {
        Log.e(TAG, "AES decryption error");
    }
    String decoded = new String(decodedBytes);

现在我遇到的问题是,解码时出现以下异常:javax.crypto.BadPaddingException:填充 block 损坏

我怀疑这是因为 secureRandom 不会在常规应用程序和 Android 应用程序中生成相同的数字(尽管具有相同的种子)。但是,我没有看到使用另一种方法来使用 secureRandom 或不使用它的方法。

任何帮助实现此功能的帮助都将受到极大的赞赏,任何有关这种加密方法的安全性的评论也将受到极大的赞赏。

最佳答案

问题是 SecureRandom,它没有使用相同的随机数生成器,而且我后来发现无论如何都不应该将其用于这些目的。相反,我使用了 MessageDigest,效果非常好。

关于java - 在android上解码加密信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20045235/

相关文章:

java - 使用java的视频服务器

安卓自定义设置

security - HTTPS 的安全性如何?任何人都不能解密回复吗?

java - 返回值基于当月

java - 为 Spring 配置 Weblogic 11g

java - JPA复合键问题: Column 'Person_ID' cannot be null

java - 使用 Android Maps API V2 的 Android 应用程序拒绝启动

java - JSON 对象不正确并导致 HttpException

java - https 与 ssl 固定

security - 在 cakephp 中使用 'low' 安全性有什么含义?