解码android上的加密信息

时间:2013-11-18 10:15:39

标签: java android security random

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

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

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:pad block corrupted

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

任何有关这项工作的帮助都会受到极大的关注,关于这种加密方法的安全性的任何评论都会受到很大关注。

1 个答案:

答案 0 :(得分:1)

问题是SecureRandom,它没有使用相同的随机数生成器,而且我后来发现不应该用于这些purpouses。相反,我使用了完美的MessageDigest。

相关问题