001package io.ebean.config.dbplatform.mysql; 002 003import io.ebean.config.dbplatform.AbstractDbEncrypt; 004import io.ebean.config.dbplatform.DbEncryptFunction; 005 006/** 007 * MySql aes_encrypt aes_decrypt based encryption support. 008 */ 009public class MySqlDbEncrypt extends AbstractDbEncrypt { 010 011 public MySqlDbEncrypt() { 012 this.varcharEncryptFunction = new MyVarcharFunction(); 013 this.dateEncryptFunction = new MyDateFunction(); 014 } 015 016 private static class MyVarcharFunction implements DbEncryptFunction { 017 018 @Override 019 public String getDecryptSql(String columnWithTableAlias) { 020 return "CONVERT(AES_DECRYPT(" + columnWithTableAlias + ",?) USING UTF8)"; 021 } 022 023 @Override 024 public String getEncryptBindSql() { 025 return "AES_ENCRYPT(?,?)"; 026 } 027 } 028 029 private static class MyDateFunction implements DbEncryptFunction { 030 031 @Override 032 public String getDecryptSql(String columnWithTableAlias) { 033 return "STR_TO_DATE(AES_DECRYPT(" + columnWithTableAlias + ",?),'%Y%d%m')"; 034 } 035 036 @Override 037 public String getEncryptBindSql() { 038 return "AES_ENCRYPT(DATE_FORMAT(?,'%Y%d%m'),?)"; 039 } 040 } 041}