# HP Forums

Full Version: (38G) Hill's Encryption System
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
The following four programmes implement Hill's Cypher system for the HP 38G.

HILLSET stores the parameters, encyphering & decyphering matrices & additional cypher vector, in M9, M0 & M8.
The programme asks for an encyphering modulus, for English perhaps 26, & size of cyphering matrices & vector, conveniently 4 to fit on the screen.

ENCY encyphers the conformable matrix M1 & stores the result in M1.

DECY decyphers the conformable matrix M1 & stores the result in M1.

For info on Hill's system see:

https://en.wikipedia.org/wiki/Hill_cipher

HILLSET
Code:
``` INPUT C;"Hill Cryptosystem"; "Modulus";" Cypher Modulus ► C";26: INPUT S;"Hill Cryptosystem"; "Size";" Size of Cypher Matrix ► S";4: IDENMAT(S)►M0: FOR I=1 TO S STEP 1; FOR J=1 TO S STEP 1; IF I==J THEN IF RANDOM>.5 THEN -1►M0(I,I): END: S►J: ELSE INT(C*(RANDOM))►M0(I,J): END: END: END:  M0: Ans*TRN(Ans): MAKEMAT(Ans(I,J)MOD C,S,S )►M9: M0^-1: MAKEMAT( ROUND(Ans(I,J),0),S,S): TRN(Ans)*Ans: MAKEMAT(Ans(I,J)MOD C,S,S )►M0: MAKEMAT(INT(C*RANDOM),1,S)►M8:```
ENCY
Code:
``` SIZE(M1): Ans(1)►T: SIZE(M9): Ans(1)►S: M1*M9: MAKEMAT(Ans(I,J)MOD C,T,S )►M1: 1: RUN M1ADDV8:```
DECY
Code:
``` -1: RUN M1ADDV8: SIZE(M1): Ans(1)►T: SIZE(M0): Ans(1)►S: M1*M0: MAKEMAT(Ans(I,J)MOD C,T,S )►M1:```
``` Ans►V: SIZE(M1): MAKEMAT((M1(I,J)+V*M8(1,J))MOD C,Ans(1),S)►M1:```
```  INPUT C;"Hill Cryptosystem"; "Modulus";" Cypher Modulus ► C";26:  INPUT S;"Hill Cryptosystem"; "Size";" Size of Cypher Matrix ► S";4:  IDENMAT(S)►M0:  FOR I=1 TO S STEP 1;  FOR J=1 TO S STEP 1;  IF I==J  THEN  IF RANDOM>.5  THEN -1►M0(I,I):  END:  BREAK:  ELSE  INT(C*(RANDOM))►M0(I,J):  END:  END:  END:   M0:  Ans*TRN(Ans):  MAKEMAT(Ans(I,J)MOD C,S,S  )►M9:  M0^-1:  MAKEMAT(  ROUND(Ans(I,J),0),S,S):  TRN(Ans)*Ans:  MAKEMAT(Ans(I,J)MOD C,S,S  )►M0:  MAKEMAT(INT(C*RANDOM),1,S)►M8:```