寻找Android的加密/解密AES示例

时间:2016-05-24 04:35:20

标签: java android encryption aes

由于我不熟悉加密技术,特别是 Java / Android ,我很难找到工作正常的教程和代码,以便我可以向他们学习但结果。

与此网站一样:https://www.owasp.org/index.php/Using_the_Java_Cryptographic_Extensions

我无法找到使用BASE64Encoder类的问题,这似乎是在sun.utils包中,但我可以找到Base64类,但我无法调整代码所以它可以为我工作。

同样在此

android encryption/decryption with AES

加密是在Bitmap Image中完成的。我无法在普通文本字符串中实现相同的技术。

有人会在Android中提供简单的AES加密/解密示例,只展示如何使用密钥,消息,加密和解密吗?

4 个答案:

答案 0 :(得分:1)

我已将此用于我的项目。

'com.scottyab:aescrypt:0.0.1'(ref: [enter link description here][1]

加密:

String encryptedMsg = AESCrypt.encrypt(password, message);

解密:

String messageAfterDecrypt = AESCrypt.decrypt(password, encryptedMsg);

如果您更关心安全性,请使用SHA1或SHA256。 希望这会有所帮助。

编辑: 在我的情况下,我必须加密登录密码并通过网络将其发送到服务器。

String userPassword = password.getText().toString();
try {
        encryptedMsg = AESCrypt.encrypt(userPassword, Config.secretlogin);
   } catch (GeneralSecurityException e) {
        e.printStackTrace();
   }

所以在后端,我用密钥解密了安全密码,而且我使用的是相同的AES(Android和后端)。

答案 1 :(得分:0)

  

我找不到用BASE64Encoder类打我的问题,   这似乎是在sun.utils包内,但我可以找到Base64   但我无法调整代码,以便它可以为我工作。

您可能没有为Base64使用正确的库。您提到sun.utils,您发送的链接正在使用:

import org.apache.commons.codec.binary.Base64;

Java 8 以来,您可以使用java.util.Base64,详见Oracle文档here。它支持基本编码,URL编码和MIME编码。您可以在this tutorial中找到一些示例。

答案 2 :(得分:0)

第二个例子适用于文本字符串。替换

byte[] b = baos.toByteArray();

byte[] b = yourString.getBytes();

请注意,您必须以某种方式存储密钥,因为在某些时候必须对其进行解密

存放在设备上并不是一个好主意,因为你将钥匙留在了门上。您可以存储在您的服务器上或使用密码(已修复或询问用户)。我给你一个最后一个选项的真实样本

private static String getPassphraseSize16(String key) {
    if (TextUtils.isEmpty(key)) {
        return null;
    }
    char controlChar = '\u0014';
    String key16 = key + controlChar;
    if (key16.length() < 16) {
        while (key16.length() < 16) {
            key16 += key + controlChar;
        }
    }
    if (key16.length() > 16) {
        key16 = key16.substring(key16.length() - 16, key16.length());
    }
    return key16;
}


public static byte[] encodeAES(byte[] message, String passphrase) {
    String passphrase16 = getPassphraseSize16(passphrase);
    SecretKeySpec secretKey = new SecretKeySpec(passphrase16.getBytes(), "AES");
    Cipher cipher = Cipher.getInstance("AES");
    cipher.init(Cipher.ENCRYPT_MODE, secretKey);
    byte[] encodedText = cipher.doFinal(message);

    return encodedText;
}


public static byte[] decodeAES(byte[] encodedMessage, String key) {
    String passphrase16 = getPassphraseSize16(key);
    SecretKeySpec secretKey = new SecretKeySpec(passphrase16.getBytes(), "AES");
    Cipher cipher = Cipher.getInstance("AES");
    cipher.init(Cipher.DECRYPT_MODE, secretKey);
    byte[] decodedText = cipher.doFinal(encodedMessage);

    return decodedText;
}

此示例与https://github.com/scottyab/AESCrypt-Android

中提供的示例类似

答案 3 :(得分:-1)

加密和解密过程在以下情况下运行良好:   我替换了从

获得的字节数组

Bitmap 按照{/ 1>中的指示byte array of message string

android encryption/decryption with AES

所以即使我的问题没有完全解决,这个问题应该标记为已回答。