为什么我问这个问题:
我知道有很多关于AES加密的问题,即使对于Android也是如此.如果你在网上搜索,有很多代码片段.但是在每一个页面上,在每个Stack Overflow问题中,我都发现了另一个具有重大差异的实现.
所以我创建了这个问题以找到"最佳实践".我希望我们可以收集最重要的要求列表,并建立一个非常安全的实施!
我读到了初始化载体和盐.并非我发现的所有实现都具有这些功能.所以你需要它吗?它是否会增加安全性?你是如何实现它的?如果加密数据无法解密,算法是否应该引发异常?或者这是不安全的,它应该只返回一个不可读的字符串?算法可以使用Bcrypt而不是SHA吗?
我发现这两个实现怎么样?他们还好吗?缺少完美或一些重要的事情?这些是安全的吗?
算法应该使用字符串和"密码"进行加密,然后使用该密码加密字符串.输出应该是一个字符串(十六进制或base64?).当然,解密也应该是可能的.
什么是Android的完美AES实现?
实施#1:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.SecretKeySpec;
public class AdvancedCrypto implements ICrypto {
public static final String PROVIDER = "BC";
public static final int SALT_LENGTH = 20;
public static final int IV_LENGTH = 16;
public static final int PBE_ITERATION_COUNT = 100;
private static final String RANDOM_ALGORITHM = "SHA1PRNG";
private static final String HASH_ALGORITHM = "SHA-512";
private static final …Run Code Online (Sandbox Code Playgroud)