由于我不熟悉加密技术,特别是 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加密/解密示例,只展示如何使用密钥,消息,加密和解密吗?
答案 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;
}
中提供的示例类似
答案 3 :(得分:-1)
加密和解密过程在以下情况下运行良好: 我替换了从
获得的字节数组 Bitmap
按照{/ 1>中的指示byte array of message string
android encryption/decryption with AES
所以即使我的问题没有完全解决,这个问题应该标记为已回答。