上下文:多租户应用
功能:加密敏感数据
故事: 作为租户的管理员,我想使用我自己的密码或密码来加密敏感数据,以便我,只有我,完全控制所使用的密钥。
验收标准:
我的问题
答案 0 :(得分:3)
在不知道密钥的情况下无法加密/解密。否则,使用密钥派生函数(PBKDF2)的PBE似乎是一个明显的案例。您可以使用非对称加密,但它只会在您的用例加密期间保护私钥。
答案 1 :(得分:2)
以下是一段代码,展示了如何在您的应用程序中使用基于密码的加密(PBE),取自tutorial:
PBEKeySpec pbeKeySpec;
PBEParameterSpec pbeParamSpec;
SecretKeyFactory keyFac;
// Salt
byte[] salt = {
(byte)0xc7, (byte)0x73, (byte)0x21, (byte)0x8c,
(byte)0x7e, (byte)0xc8, (byte)0xee, (byte)0x99
};
// Iteration count
int count = 20;
// Create PBE parameter set
pbeParamSpec = new PBEParameterSpec(salt, count);
// Prompt user for encryption password.
// Collect user password as char array (using the
// "readPasswd" method from above), and convert
// it into a SecretKey object, using a PBE key
// factory.
System.out.print("Enter encryption password: ");
System.out.flush();
pbeKeySpec = new PBEKeySpec(readPasswd(System.in));
keyFac = SecretKeyFactory.getInstance("PBEWithMD5AndDES");
SecretKey pbeKey = keyFac.generateSecret(pbeKeySpec);
// Create PBE Cipher
Cipher pbeCipher = Cipher.getInstance("PBEWithMD5AndDES");
// Initialize PBE Cipher with key and parameters
pbeCipher.init(Cipher.ENCRYPT_MODE, pbeKey, pbeParamSpec);
// Our cleartext
byte[] cleartext = "This is another example".getBytes();
// Encrypt the cleartext
byte[] ciphertext = pbeCipher.doFinal(cleartext);