IF exists (select * from INFORMATION_SCHEMA.ROUTINES where ROUTINE_NAME = 'dd_Dynamics_Decrypt') begin
DROP proc dd_Dynamics_Decrypt
end
GO
CREATE proc dd_Dynamics_Decrypt
@Password binary(100)
/*
TO TEST, RUN THIS CODE
DECLARE @p binary(100)
SELECT @p = password from dynamics..sy02400
exec dd_Dynamics_Decrypt @p
*/
AS
/*
Written by Steve Gray, www.DynDeveloper.com, steve@4Penny.net
Free to distribute and reuse
Please do not remove this banner
*/
set transaction isolation level read uncommitted
if len(@Password) = 0 begin
select '' as Password
return
end
declare @passChars varchar(100) = substring(master.dbo.fn_varbintohexstr(@Password), 1, 22)
declare @out varchar(50) = ''
declare @chr varchar(2)
declare @len int = len(@passChars)
declare @a int = 0
while @a < @len begin
set @chr = left(@passChars,2)
set @passChars = SUBSTRING(@passChars,3,99)
set @out = @out + case
when @chr = '0x' then ''
when @chr = 'DF' then '1'
when @chr = 'DC' then '2'
when @chr = 'DD' then '3'
when @chr = 'DA' then '4'
when @chr = 'DB' then '5'
when @chr = 'D8' then '6'
when @chr = 'D9' then '7'
when @chr = 'D6' then '8'
when @chr = 'D7' then '9'
when @chr = 'AF' then 'A'
when @chr = 'AC' then 'B'
when @chr = 'AD' then 'C'
when @chr = 'AA' then 'D'
when @chr = 'AB' then 'E'
when @chr = 'A8' then 'F'
when @chr = 'A9' then 'G'
when @chr = 'A6' then 'H'
when @chr = 'A7' then 'I'
when @chr = 'A4' then 'J'
when @chr = 'A5' then 'K'
when @chr = 'A2' then 'L'
when @chr = 'A3' then 'M'
when @chr = 'A0' then 'N'
when @chr = 'A1' then 'O'
when @chr = 'BE' then 'P'
when @chr = 'BF' then 'Q'
when @chr = 'BC' then 'R'
when @chr = 'BD' then 'S'
when @chr = 'BA' then 'T'
when @chr = 'BB' then 'U'
when @chr = 'B8' then 'V'
when @chr = 'B9' then 'W'
when @chr = 'B6' then 'X'
when @chr = 'B7' then 'Y'
when @chr = 'B4' then 'Z'
when @chr = '8F' then 'a'
when @chr = '8C' then 'b'
when @chr = '8D' then 'c'
when @chr = '8A' then 'd'
when @chr = '8B' then 'e'
when @chr = '88' then 'f'
when @chr = '89' then 'g'
when @chr = '86' then 'h'
when @chr = '87' then 'i'
when @chr = '84' then 'j'
when @chr = '85' then 'k'
when @chr = '82' then 'l'
when @chr = '83' then 'm'
when @chr = '80' then 'n'
when @chr = '81' then 'o'
when @chr = '9E' then 'p'
when @chr = '9F' then 'q'
when @chr = '9C' then 'r'
when @chr = '9D' then 's'
when @chr = '9A' then 't'
when @chr = '9B' then 'u'
when @chr = '98' then 'v'
when @chr = '99' then 'w'
when @chr = '96' then 'x'
when @chr = '97' then 'y'
when @chr = '94' then 'z'
when @chr = 'CF' then '!'
when @chr = 'AE' then '@'
when @chr = 'CD' then '#'
when @chr = 'CA' then '$'
when @chr = 'CB' then '%'
when @chr = 'B0' then '^'
when @chr = 'C8' then '&'
when @chr = 'C4' then '*'
when @chr = 'C6' then '('
when @chr = 'C7' then ')'
when @chr = 'CE' then ' '
when @chr = '20' then ''
when @chr = '00' then ''
when @chr = 'C3' then '-'
when @chr = 'B1' then '_'
when @chr = 'D3' then '='
when @chr = 'C5' then '+'
when @chr = 'B5' then '['
when @chr = 'B3' then ']'
when @chr = '95' then '{'
when @chr = '93' then '}'
when @chr = 'B2' then '='
when @chr = '92' then '|'
when @chr = 'D5' then ';'
when @chr = 'D4' then ':'
when @chr = 'C9' then ''
when @chr = 'CC' then '"'
when @chr = 'C2' then '='
when @chr = 'D2' then '<'
when @chr = 'C0' then '.'
when @chr = 'D0' then '>'
when @chr = 'C1' then '/'
when @chr = 'D1' then '?'
when @chr = '8E' then '`'
when @chr = '90' then '~'
--else '?' + @chr + '?' end
else '' end
set @a = @a + 1
end
select @out as Password
GO
GRANT EXEC ON dd_Dynamics_Decrypt TO PUBLIC