DELIMITER $$ CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`crypt`(vText VARCHAR(255), vKey VARCHAR(255), OUT vResult VARCHAR(255) ) BEGIN DECLARE vEncryptedText VARCHAR(255) DEFAULT ''; DECLARE vKeyLength INT; DECLARE vKeyPosition INT DEFAULT 1; DECLARE vKeyChar VARCHAR(1); DECLARE vTextLength INT; DECLARE vTextPosition INT DEFAULT 1; DECLARE vTextChar VARCHAR(1); DECLARE vEncryptedChar VARCHAR(1); DECLARE vEncryptedCharPosition INT; DECLARE vChain VARCHAR(255) DEFAULT '#$.-_0123456789abcdefghijklmnopqrstuvwxyz'; DECLARE vChainTextPosition INT; DECLARE vChainKeyPosition INT; DECLARE vChainLength INT; DECLARE vInvalidadChars VARCHAR(255) DEFAULT ''; SET vTextLength = LENGTH(vText); SET vKeyLength = LENGTH(vKey); SET vChainLength = LENGTH(vChain); WHILE vTextPosition <= vTextLength DO SET vTextChar = MID(vText,vTextPosition,1); SET vKeyChar = MID(vKey,vKeyPosition,1); SET vChainTextPosition = LOCATE(vTextChar, vChain); SET vInvalidadChars = IF(vChainTextPosition, vInvalidadChars, CONCAT(vInvalidadChars,vTextChar)); SET vChainKeyPosition = LOCATE(vKeyChar, vChain); SET vEncryptedCharPosition = vChainTextPosition + vChainKeyPosition; IF vEncryptedCharPosition > vChainLength THEN SET vEncryptedCharPosition = vEncryptedCharPosition - vChainLength; END IF; SET vEncryptedChar = MID(vChain, vEncryptedCharPosition,1); SET vEncryptedText = CONCAT(vEncryptedText, vEncryptedChar); SET vKeyPosition = IF(vKeyPosition = vKeyLength, 1,vKeyPosition + 1); SET vTextPosition = vTextPosition + 1; END WHILE; SET vResult = IF(LENGTH(vInvalidadChars), CONCAT('Caracteres no vĂ¡lidos: ',vInvalidadChars),vEncryptedText); END$$ DELIMITER ;