Ebean手工解密
Ebean manual decryption
我已经使用 this SO post 中提供的答案成功地为模型中的字段设置了加密。但我想知道如何从 SQL 客户端手动解密字段以进行调试。我想要 Mysql(Prod 数据库)的信息,最好是 H2(开发数据库)的信息。根据 E-bean 文档 Mysql 使用 AES_ENCRYPT/AES_DECRYPT 并且 H2 使用 ENCRYPT/DECRYPT 函数。
@Encrypted
@Column(columnDefinition="varchar(50)")
public String password;
注意:我已将加密字段的数据类型设置为 varchar 而不是 binary,如下所示。因此,Ebean 可能会对生成的二进制数据进行额外的 Hex。
class CustomEncryptKey implements EncryptKey{
private String tableName;
private String columnName;
public CustomEncryptKey(String tableName, String columnName){
this.tableName = tableName;
this.columnName = columnName;
}
@Override
public String getStringValue() {
return "my-encryption-key";
}
}
我设法找到了答案。对于我-SQL
解密:
SELECT CAST(AES_DECRYPT(encrypted-field,'my-encryption-key') as CHAR(50)) from table
加密:
SELECT AES_ENCRYPT(encrypted-field,'my-encryption-key') from table;
对于 H2:
加密:
ENCRYPT('AES', STRINGTOUTF8('<encryption-key>'), STRINGTOUTF8('<text to be encrypted>'))
解密:
TRIM(CHAR(0) FROM UTF8TOSTRING(DECRYPT('AES', STRINGTOUTF8('<encryption-key>'), '<text to be encrypted>')))
我已经使用 this SO post 中提供的答案成功地为模型中的字段设置了加密。但我想知道如何从 SQL 客户端手动解密字段以进行调试。我想要 Mysql(Prod 数据库)的信息,最好是 H2(开发数据库)的信息。根据 E-bean 文档 Mysql 使用 AES_ENCRYPT/AES_DECRYPT 并且 H2 使用 ENCRYPT/DECRYPT 函数。
@Encrypted
@Column(columnDefinition="varchar(50)")
public String password;
注意:我已将加密字段的数据类型设置为 varchar 而不是 binary,如下所示。因此,Ebean 可能会对生成的二进制数据进行额外的 Hex。
class CustomEncryptKey implements EncryptKey{
private String tableName;
private String columnName;
public CustomEncryptKey(String tableName, String columnName){
this.tableName = tableName;
this.columnName = columnName;
}
@Override
public String getStringValue() {
return "my-encryption-key";
}
}
我设法找到了答案。对于我-SQL
解密:
SELECT CAST(AES_DECRYPT(encrypted-field,'my-encryption-key') as CHAR(50)) from table
加密:
SELECT AES_ENCRYPT(encrypted-field,'my-encryption-key') from table;
对于 H2:
加密:
ENCRYPT('AES', STRINGTOUTF8('<encryption-key>'), STRINGTOUTF8('<text to be encrypted>'))
解密:
TRIM(CHAR(0) FROM UTF8TOSTRING(DECRYPT('AES', STRINGTOUTF8('<encryption-key>'), '<text to be encrypted>')))