首页 > 解决方案 > Android中的加密/解密

问题描述

我已经使用静态密码(即“加密”)在 android 中进行了加密。加密工作正常并加密数据。但是当我尝试解密它没有显示的加密文本时。解密代码如下。

public String decrypt(String msg, String inputPassword) throws Exception{
    SecretKeySpec key= generateKey(inputPassword);
    Cipher c = Cipher.getInstance(AES);
    c.init(Cipher.DECRYPT_MODE, key);
    byte[] decodedValue= Base64.decode(msg, Base64.DEFAULT);

    /*If this line is present the encrypted message is not seen*/
    byte[] decValue = c.doFinal(Base64.decode(decodedValue, 
Base64.DEFAULT));
    String decryptedValue = new String(decodedValue);
    String decryptedValue = new String(decValue, StandardCharsets.UTF_8);
    return decryptedValue;
}

启用代码(在注释下方)时。不显示该消息。但是当该行被评论时。这显示在消息框中

代码注释后。

这是加密和密钥生成方法。

public String encrypt(String message, String inputPassword) throws Exception{
    SecretKeySpec key = generateKey(inputPassword);
    Cipher c = Cipher.getInstance(AES);
    c.init(c.ENCRYPT_MODE, key);
    byte[] encVal = c.doFinal(message.getBytes());
    String encryptedValue = Base64.encodeToString(encVal, Base64.DEFAULT);
    return encryptedValue;
}

//For generating key for encryption
public SecretKeySpec generateKey(String inputPassword) throws  Exception{
    final MessageDigest digest = MessageDigest.getInstance("SHA-256");
    byte[] bytes = inputPassword.getBytes("UTF-8");
    digest.update(bytes, 0, bytes.length);
    byte[] key = digest.digest();
    SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES");
    return secretKeySpec;
}

日志如下 在此处输入图像描述

API级别也没有维护......我也不知道在哪里设置它。 在此处输入图像描述

标签: androidencryptionaes

解决方案


你能试着改变这个吗

String decryptedValue = new String(decodedValue)

对此

String decryptedValue = new String(decodedValue, StandardCharsets.UTF_8)

对于您的错误,请尝试更改为

c.doFinal(Base64.decode(decodedValue, Base64.DEFAULT))

推荐阅读