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 * 009 * @author rbygrave 010 */ 011public class MySqlDbEncrypt extends AbstractDbEncrypt { 012 013 public MySqlDbEncrypt() { 014 this.varcharEncryptFunction = new MyVarcharFunction(); 015 this.dateEncryptFunction = new MyDateFunction(); 016 } 017 018 private static class MyVarcharFunction implements DbEncryptFunction { 019 020 @Override 021 public String getDecryptSql(String columnWithTableAlias) { 022 return "CONVERT(AES_DECRYPT(" + columnWithTableAlias + ",?) USING UTF8)"; 023 } 024 025 @Override 026 public String getEncryptBindSql() { 027 return "AES_ENCRYPT(?,?)"; 028 } 029 } 030 031 private static class MyDateFunction implements DbEncryptFunction { 032 033 @Override 034 public String getDecryptSql(String columnWithTableAlias) { 035 return "STR_TO_DATE(AES_DECRYPT(" + columnWithTableAlias + ",?),'%Y%d%m')"; 036 } 037 038 @Override 039 public String getEncryptBindSql() { 040 return "AES_ENCRYPT(DATE_FORMAT(?,'%Y%d%m'),?)"; 041 } 042 } 043}