Skip to content

Instantly share code, notes, and snippets.

@juanparati
Last active July 4, 2017 10:46
Show Gist options
  • Save juanparati/ceb20f45d81f0a2c9a1b97bd0597d07f to your computer and use it in GitHub Desktop.
Save juanparati/ceb20f45d81f0a2c9a1b97bd0597d07f to your computer and use it in GitHub Desktop.
Laravel AES-256-CBC decryption implemented directly on MYSQL
-- 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