The Password Encryption Technique

SEAV Softwares
Tutorials

Giving out the source code to your game so that other people may learn from it is a nice thing. But there are times when people examine your code to get secret passwords, plot lines, and special codes. You, as a game designer would not really want that to happen unless it really is intention to give out hints and cheats.
There are many ways of encrypting game information. What I am about to present is away of encrypting user input so that even the most able programmer cannot find the necessary input by turning the program code inside-out.
Let's suppose you have in your arcade game a password input dialog box (probably to a specified level) or a very hard riddle. You might want to encrypt the password or the answer to the riddle so that the player cannot find the answer by examining your code. You can use elementary ciphers and encryption systems but they are decipherable particularly for the determined player. What you need is a one-way encryption-encryption that cannot practically be deciphered.
Look at the following function, which encrypts a text into its corresponding encrypted numeric value.
DEFINT A-Z
FUNCTION ENCRYPT& (Text$)

IF LEN(Text$) then
  Enc& = ASC(Text$)
  ASCCurr = Enc&

  FOR I = 2 to LEN(Text$)
    ASCPrev = ASCCurr
    ASCCurr = ASC(MID$(Text$, I, 1))
    Enc& = Enc& + 1& * ASCPrev * ASCCurr * I
  NEXT

  ENCRYPT& = Enc&
END IF

END FUNCTION
This routine multiplies the ASCII codes of consecutive characters together with the position of the first of the consecutive characters. Before doing that, the value is seeded with the ASCII code of the first character.
Given the encrypted value, it would be extremely hard (but not impossible) to find the original. It is solvable if you use the brute-force method-such as trying out all the combinations for a simple mechanical lock. Yet it would take a computer testing 3 billion combinations a second almost two centuries to test all possible combinations for a simple 8-character password. I don't think there is any faster way of finding the original text, since this is like solving a mathematical multi-variable equation using only one equation.
Variations of this method can be developed but be sure that the method you use would give values that would fit the long integer data type for reasonable lengths of text.
SEAV Softwares

How do you implement this one-way encryption? You first obtain the encrypted value for the target input, such as the actual answer to a riddle. You then save this value as data or hard code it into the program. That way, the original is nowhere to be found in your game. You then program the game to encrypt whatever input the player enters. The game will then compare this encrypted value with the original value and the player has the answer if the two match.
Following is a demo program demonstrating this password encryption. I challenge you to find the password!
'---------------------------------------
DECLARE FUNCTION ENCRYPT& (Text$)

DEFINT A-Z
CLS

PRINT " Password Login"
PRINT STRING$(80, "")

DO
  LOCATE 4, 4
  PRINT STRING$(75, " ")

  LOCATE 4, 4
  INPUT "Please enter password: ", Password$

  Validate& = ENCRYPT(Password$)

LOOP UNTIL Validate& = 910968

LOCATE 6, 4
PRINT "Access Granted"

DEFINT A-Z
FUNCTION ENCRYPT& (Text$)

IF LEN(Text$) then
  Enc& = ASC(Text$)
  ASCCurr = Enc&

  FOR I = 2 to LEN(Text$)
    ASCPrev = ASCCurr
    ASCCurr = ASC(MID$(Text$, I, 1))
    Enc& = Enc& + 1& * ASCPrev * ASCCurr * I
  NEXT

  ENCRYPT& = Enc&
END IF

END FUNCTION
Hope that this information will be useful to you!


Copyright © 1997-1998, SEAV Softwares. All rights reserved.
Eugene Villar (SEAV); e-mail: evillar@geocities.com
Visit my web site: SEAV Softwares Web Site