[MySQL] AES256 データ暗号化、複合化

inno
2023-08-23 11:17 280 0

AES256 データ暗号化、複合化

 

 

input string

varbinary長さ

暗号化HEXのvarchar長さ(日本語基準)

100

310

608

150

470

928

200

620

1216

250

770

1504

 

 

1.暗号化関数

 

DROP FUNCTION if exists `fnEnVarchar`;

 

DELIMITER $$

CREATE FUNCTION `fnEnVarchar`(

prmValue varchar(500)

) RETURNS varbinary(1024)

    DETERMINISTIC

BEGIN

 

## select @@session.block_encryption_mode;

SET @@session.block_encryption_mode = 'aes-256-ecb';

return aes_encrypt(prmValue,'Xb6f_9Nx5K!MA_RTnzqf');

    

END$$

DELIMITER ;

 

 

DROP FUNCTION if exists `fnEnVarcharHex`;

 

DELIMITER $$

CREATE FUNCTION `fnEnVarcharHex`(

prmValue varchar(500)

) RETURNS varchar(1600)

    DETERMINISTIC

BEGIN

 

## select @@session.block_encryption_mode;

SET @@session.block_encryption_mode = 'aes-256-ecb';

return HEX(aes_encrypt(prmValue,'Xb6f_9Nx5K!MA_RTnzqf'));

    

END$$

DELIMITER ;

 

 

2.復号化関数

 

DROP FUNCTION if exists `fnDeVarchar`;

 

DELIMITER $$

CREATE FUNCTION `fnDeVarchar`(

prmValue varbinary(1024)

) RETURNS varchar(500)

    DETERMINISTIC

BEGIN

 

## select @@session.block_encryption_mode;

SET @@session.block_encryption_mode = 'aes-256-ecb';

## return cast(aes_decrypt(prmValue ,'Xb6f_9Nx5K!MA_RTnzqf') as char(500));    

return convert(aes_decrypt(prmValue, 'Xb6f_9Nx5K!MA_RTnzqf') USING utf8mb4);

    

END$$

DELIMITER ;

 

 

DROP FUNCTION if exists `fnDeVarcharHex`;

 

DELIMITER $$

CREATE FUNCTION `fnDeVarcharHex`(

prmValue varchar(1600)

) RETURNS varchar(500)

    DETERMINISTIC

BEGIN

 

## select @@session.block_encryption_mode;

SET @@session.block_encryption_mode = 'aes-256-ecb';

## return cast(aes_decrypt(UNHEX(prmValue) ,'Xb6f_9Nx5K!MA_RTnzqf') as char(500));    

return convert(aes_decrypt(UNHEX(prmValue), 'Xb6f_9Nx5K!MA_RTnzqf') USING utf8mb4);

    

END$$

DELIMITER ;

 

 

3.テスト実行

 

DROP TABLE IF EXISTS `tTempData`;

 

CREATE TABLE `tTempData` (

  `Data1` varchar(250) DEFAULT NULL,

  `Data2` varbinary(1024) DEFAULT NULL,

  `Data2Hex` varchar(1500) DEFAULT NULL

) ;

 

INSERT INTO tTempData

SELECT 'TEST', fnEnVarchar('test'), fnEnVarcharHex('test');

 

SELECT Data1

, fnDeVarchar(Data2) AS Data2

, fnDeVarcharHex(Data2Hex) AS Data2Hex

FROM tTempData;

コメント