Manitou Core - SQL Query - Decode Passwords (Internal Use Only)

DO NOT GIVE THIS TO CUSTOMERS, THIS IS STRICTLY FOR INTERNAL USE!!

A script to decode Manitou passwords if they are ever lost. There is a single line that needs to be edited and is identified by a comment just before it for this query to work. By default the script runs against the BOLD user. 

USE [MANITOU];
GO

-- Check for decode function and remove if it exists
IF OBJECT_ID(N'[dbo].[DecodeManitouPassword]', N'FN') IS NOT NULL
	BEGIN
	DROP FUNCTION [dbo].[DecodeManitouPassword];
	END;
GO

-- Add decode function
CREATE FUNCTION [dbo].[DecodeManitouPassword]
	(@EncodedPassword VARCHAR(150))
RETURNS VARCHAR(75)
AS
BEGIN
	DECLARE @PasswordIndex BIGINT;
	DECLARE @PasswordLength BIGINT;
	DECLARE @EncodedPasswordCharacter1 CHAR(1);
	DECLARE @EncodedPasswordCharacter2 CHAR(1);
	DECLARE @EncodedPasswordCharacter1_ASCII SMALLINT;
	DECLARE @EncodedPasswordCharacter2_ASCII SMALLINT;
	DECLARE @DecodedPasswordCharacter CHAR(1);
	DECLARE @DecodedPasswordCharacter_ASCII SMALLINT;
	DECLARE @DecodedPassword VARCHAR(75);

	SET @PasswordIndex = 1;
	SET @PasswordLength = LEN(@EncodedPassword);
	SET @DecodedPassword = '';


	WHILE @PasswordIndex <= @PasswordLength
		BEGIN
		SET @EncodedPasswordCharacter1 = SUBSTRING(@EncodedPassword, @PasswordIndex, 1);
		SET @EncodedPasswordCharacter1_ASCII = ASCII(@EncodedPasswordCharacter1);
		SET @EncodedPasswordCharacter2 = SUBSTRING(@EncodedPassword, @PasswordIndex + 1, 1);
		SET @EncodedPasswordCharacter2_ASCII = ASCII(@EncodedPasswordCharacter2);

		IF ASCII(@EncodedPasswordCharacter1) = 195
			BEGIN
			-- ASCII character between 0 and 63
			SET @DecodedPasswordCharacter_ASCII = CASE @EncodedPasswordCharacter2_ASCII % 8
					WHEN 5 THEN 133
					WHEN 4 THEN 131
					WHEN 7 THEN 133
					WHEN 6 THEN 131
					WHEN 1 THEN 125
					WHEN 0 THEN 123
					WHEN 3 THEN 125
					WHEN 2 THEN 123
					ELSE NULL
				END;
			END
		ELSE IF ASCII(@EncodedPasswordCharacter1) = 194
			BEGIN
			-- ASCII character between 64 and 128
			SET @DecodedPasswordCharacter_ASCII = CASE (@EncodedPasswordCharacter2_ASCII - 64) % 8
					WHEN 5 THEN 69
					WHEN 4 THEN 67
					WHEN 7 THEN 69
					WHEN 6 THEN 67
					WHEN 1 THEN 61
					WHEN 0 THEN 59
					WHEN 3 THEN 61
					WHEN 2 THEN 59
					ELSE NULL
				END;
			END;

		SET @DecodedPasswordCharacter_ASCII = @EncodedPasswordCharacter2_ASCII - @DecodedPasswordCharacter_ASCII;
		SET @DecodedPasswordCharacter = CHAR(@DecodedPasswordCharacter_ASCII);

		SET @DecodedPassword = @DecodedPassword + @DecodedPasswordCharacter;
	
		SET @PasswordIndex = @PasswordIndex + 2;
		END;

	RETURN @DecodedPassword;
END;
GO


--------------------------------------------------------------------------------------------------------------------
-- Edit the user BOLD in the following DECLARE statement to decode the user's password as desired.
--------------------------------------------------------------------------------------------------------------------

DECLARE @UserId NVARCHAR(12) = N'BOLD';


SELECT
	AP1.[PasswordType]
	, AP1.[UserId]
	, AP1.[Password]
	, AP1.[PasswordDateTime]
FROM
	[PASSWD] AS AP
	CROSS APPLY (
		SELECT
			AP.[USRID] AS [UserId]
			, CASE AP.[TYPE]
					WHEN 0 THEN '0 - Manitou'
					WHEN 1 THEN '1 - Accounts System'
					ELSE NULL
				END AS [PasswordType]
			, [dbo].[DecodeManitouPassword](AP.[PASSWD]) AS [Password]
			, AP.[PWDATE] AS [PasswordDateTime]
		) AS AP1
WHERE
	AP.[ACTIVE] = 1
	AND AP.[USRID] = @UserId
ORDER BY
	AP1.[PasswordType] ASC
	, AP1.[UserId] ASC;


-- Remove function to prevent abuse
DROP FUNCTION [dbo].[DecodeManitouPassword];
GO

Was this article helpful?
Thank you for your feedback!
User Icon

Thank you! Your comment has been submitted for approval.