Last active
July 4, 2017 10:46
-
-
Save juanparati/ceb20f45d81f0a2c9a1b97bd0597d07f to your computer and use it in GitHub Desktop.
Laravel AES-256-CBC decryption implemented directly on MYSQL
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- Direct SELECT version | |
SELECT | |
FROM_BASE64(JSON_UNQUOTE(JSON_EXTRACT(CONVERT(FROM_BASE64(email) USING utf8), '$.iv'))) AS iv, | |
JSON_UNQUOTE(JSON_EXTRACT(CONVERT(FROM_BASE64(email) USING utf8), '$.value')) AS value, | |
FROM_BASE64('mysecretkey') AS pkey, | |
AES_DECRYPT(FROM_BASE64(JSON_UNQUOTE(JSON_EXTRACT(CONVERT(FROM_BASE64(email) USING utf8), '$.value'))), FROM_BASE64('mysecretkey'), FROM_BASE64(JSON_UNQUOTE(JSON_EXTRACT(CONVERT(FROM_BASE64(email) USING utf8), '$.iv')))) AS decrypted | |
-- Function version | |
CREATE FUNCTION `LARAVEL_DECRYPT`( | |
`encstr` TEXT, | |
`raw_key` VARCHAR(255) | |
) | |
RETURNS varchar(255) CHARSET utf8 COLLATE utf8_unicode_ci | |
LANGUAGE SQL | |
DETERMINISTIC | |
READS SQL DATA | |
SQL SECURITY DEFINER | |
COMMENT '' | |
BEGIN | |
DECLARE decrypted VARCHAR(255); | |
SET decrypted = AES_DECRYPT(FROM_BASE64(JSON_UNQUOTE(JSON_EXTRACT(CONVERT(FROM_BASE64(encstr) USING utf8), '$.value'))), FROM_BASE64(raw_key), FROM_BASE64(JSON_UNQUOTE(JSON_EXTRACT(CONVERT(FROM_BASE64(encstr) USING utf8), '$.iv')))); | |
SET decrypted = SUBSTRING_INDEX(decrypted, ':', -1); | |
SET decrypted = SUBSTRING(decrypted, 2, CHAR_LENGTH(decrypted) - 3); | |
return (decrypted); | |
END |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment