当程序中使用硬编码加密密匙时,所有项目开发人员都可以查看该密匙,甚至如果攻击者能够获取 程序 class文件,可通过反编译得到密匙,硬编码加密密匙会大大降低系统安全性。
对于避免使用硬编码密匙的情况,示例1给出了不规范用法(Java 语言)示例。示例2给出了规范 用法(Java 语言)示例。
示例1:private static String encryptionKey ="dfashsdsdfsdgagascv";byte[] keyBytes = encryptionKey.getBytes();SecretKeySpec key = new SecretKeySpec(keyBytes,"AES");Cipher encryptCipher = Cipher.getInstance("AES");encryptCipher.init(Cipher.ENCRYPT MODE,key);
上述代码使用硬编码加密密钥执行 AES 加密。
程序应采用不小于8个字节的随机生成的字符串作为密匙。
示例2:KeyGeneratorkeyGen = KeyGenerator.getInstance("AES");keyGen.init(128,new SecureRandom(password.getBytes()));SecretKeysecretKey = kgen.generateKey();byte[] keyBytes = secretKey.getEncoded();SecretKeySpec key = new SecretKeySpec(keyBytes,"AES");Cipher encryptCipher = Cipher.getInstance("AES");encryptCipher.init(Cipher.ENCRYPT MODE,key);
上述代码使用 KeyGenerator 来生成密匙。