ENCRIPTAR/DESENCRIPTAR UN ARCHIVO DE TEXTO

Todo lo relacionado con REXX en este ambiente.
Responder
Víctor Hugo Zepeda
Usuario
Usuario
Mensajes: 9
Registrado: 14 May 2011, 07:53
País: Chile
Ciudad: Santiago
Ocupación: Otra

ENCRIPTAR/DESENCRIPTAR UN ARCHIVO DE TEXTO

Mensaje por Víctor Hugo Zepeda » 01 Nov 2012, 17:57

Un pequeño aporte para el mundo de los DINOREXX.

Desarrollado con el producto THE (The Hessling Editor), el que trae embebido REXX.

Para plataforma WINDOWS.

Pueden bajar el producto completo y más desde http://www.rexx.org/

Objetivo de es REXX es poder encriptar o desencriptar archivos de texto.

Bueno, aquí va el programita:

/* (c) Victor Hugo Zepeda Concha; Santiago, 24 de Julio del 2001
Nombre : ZHC.REX-(ZepedaHiddenCharacter)
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* OBJETIVO : Encriptar archivos *
* *
* FORMATO : ZHC archivo clave *
* *
* Donde : archivo a encriptar *
* clave de encriptacion, la que se compone de *
* dos elementos. *
* a) el signo + o - que indica encriptar o *
* desencriptar *
* b) un numero de hasta ocho digitos que es *
* la clave de encriptacion/desencriptacion *
* *
* *
* EJEMPLO : ZHC C:\DATOS\CARTA.DAT +1234567 (Encripta) *
* ZHC C:\DATOS\CARTA.DAT -1234567 (DesEncripta) *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*/
Trace Off
/***********************************************************************
RECEPCION DE PARAMETROS
***********************************************************************/
Parse upper arg InFile Code .
/***********************************************************************
VERIFICO SI ARCHIVO DE ENTRADA EXISTE
***********************************************************************/
DIRBase="D:\Z\$PAZO\"
InFile=DIRBase||InFile
FE=Stream(InFile,'C','QUERY EXISTS')
If FE\=InFile
then do
"MSG Archivo '"InFile"' no existe"
exit
end
EnUnEnc=SubStr(Code,1,1);EncCode=SubStr(Code,2)
If EnUnEnc='+' | EnUnEnc='-'
then do
Nop
end
else do
'EMSG Error: Clave no esta precedida por signo "+" o "-"'
Exit
end
If Length(EncCode)=0
then do
'EMSG Error: Codigo de Encriptacion/DesEncriptacion omitido'
Exit
end
If Length(EncCode)>8
then do
'EMSG Error: Codigo de Encriptacion/DesEncriptacion mayor a 8 '||,
'digitos'
Exit
end
If DataType(EncCode,n)=0
then do
'EMSG Error: Codigo de Encriptacion/DesEncriptacion no numerico'
Exit
end
/***********************************************************************
SI ARCHIVO DE PASO EXISTE, LO ELIMINO
***********************************************************************/
OutFile=DIRBase||'ZHI2.$$$'
FE=Stream(OutFile,'C','QUERY EXISTS')
If FE=OutFile
then do
'OSQ DEL 'OutFile
end
Signal on NotReady
'Set MsgLine on 2 1';'MsgMode On'
If EnUnEnc='+'
then do
"MSG Encriptando archivo '"InFile"'..."
end
else do
"MSG DesEncriptando archivo '"InFile"'..."
end
/***********************************************************************
ENCRIPTA O DESENCRIPTA?
***********************************************************************/
If EnUnEnc='+'
then do
Call LeerInFile
Do until Fs=10
Call EnCriptar
Call GrabarOutFile
Call LeerInFile
End
end
else do
Call LeerInFile
Do until Fs=10
Call DesEnCriptar
Call GrabarOutFile
Call LeerInFile
End
end
FE=Stream(InFile,'C','CLOSE')
FE=Stream(OutFile,'C','CLOSE')
'OSQ DEL 'InFile
'OSQ COPY 'OutFile InFile
'OSQ DEL 'OutFile
If EnUnEnc='+'
then do
"MSG Archivo '"InFile"' Encriptado..."
end
else do
"MSG Archivo '"InFile"' DesEncriptado..."
end
Exit
/***********************************************************************
RUTINA ENCRIPTADORA
***********************************************************************/
EnCriptar:
NewLine=""
Do I=1 until I>Length(RIN)
If I>Length(RIN)
then do
Leave
end
Do J=1 to Length(EncCode)
NewLine=NewLine||D2C(C2D(SubStr(RIN,I,1))+SubStr(EncCode,J,1))
I=I+1
If I>Length(RIN)
then do
Leave
end
Iterate
End
I=I-1
End
Return
/***********************************************************************
RUTINA DESENCRIPTADORA
***********************************************************************/
DesEnCriptar:
NewLine=""
Do I=1 until I>Length(RIN)
If I>Length(RIN)
then do
Leave
end
Do J=1 to Length(EncCode)
NewLine=NewLine||D2C(C2D(SubStr(RIN,I,1))-SubStr(EncCode,J,1))
I=I+1
If I>Length(RIN)
then do
Leave
end
Iterate
End
I=I-1
End
Return

/***********************************************************************
RUTINA DE LECTURA
***********************************************************************/
LeerInFile:
RIN=LINEIN(InFile)
Return

/***********************************************************************
RUTINA DE GRABACION
***********************************************************************/
GrabarOutFile:
LINEOUT(OutFile,NewLine)
Return

NOTREADY:
Fs=10


Espero le sirva a alguna persona.

Víctor Hugo Zepeda.

Responder