NomKasxilo

Descripción del contenido de la página

Utilidad escrita en SuperBASIC para encriptar textos en códigos fuente.

Etiquetas:

Este antiguo programa, escrito en SuperBASIC para la QL, tiene algo especial en su sencillez. Lo escribí para encriptar mis datos personales en el código fuente, en ensamblador de Z80, de Finen per Imago, un programa para ZX Spectrum. La encriptación que ideé era sencilla pero suficiente: el cambio de cada carácter del texto depende de su posición en él; puede verse en la función fórmula$(), que es la que hace el trabajo.

«Nomkasxilo» significa «ocultador de nombres» en esperanto («sx» es una notación alternativa en ASCII de la letra «ŝ»). El código fuente del programa está en castellano y la interfaz de usuario está en esperanto.

Pantallazos

El texto a cifrar se escribe en un recuadro:

Entrada de datos

Tras hacer el cifrado, el programa propone tres formas de guardar el resultado: en un texto para insertar en un programa en SuperBASIC, en un texto para insertar en un programa en ensamblador de Z80, o sólo como octetos:

Grabación del resultado

Si el texto a cifrar está vacío, el programa termina y nos indica el fichero que contiene el resultado:

Fin

Código fuente

1000 REMark NomKasxilo
1010 :
1020 REMark Cifra textos para ocultar los créditos de programas compilados
1030 :
1040 REMark Copyright (C) 1989,1992 Marcos Cruz (http://programandala.net)
1050 REMark Licencia/Permesilo/License:
1060 REMark http://programandala.net/licencia
1070 :
1080 :
1090 REMark 1989-12-20 Versión 0.00
1100 REMark 1992-01-07 Versión 1.00
1110 REMark 2010-08-20 Pequeños cambios cosméticos en la fuente.
1120 :
1130 fichero$="ram1_nomkasxilo_txt"
1140 d%=FOP_OVER(fichero$)
1150 IF d%<0:trata_error(d%)
1160 :
1170 REPeat bucle
1180 :
1190  x%=FOP_OVER(scr_512x256a0x0)
1200  IF x%<0:trata_error(x%)
1210  PAPER#x%,0
1220  CLS#x%
1230  CLOSE#x%
1240 :
1250  f%=FOP_OVER(con_512x256a0x0)
1260  IF f%<0:trata_error(f%)
1270  BORDER#f%,1,7,2
1280  PAPER#f%,2
1290  INK#f%,7
1300  CLS#f%
1310  AT#f%,2,2
1320  CSIZE#f%,2,1
1330  PRINT#f%,"NomKasxilo v1.00"
1340  CSIZE#f%,0,0
1350  AT#f%,2,40
1360  PRINT#f%,"(C) 1989,1992 Marcos Cruz"
1370  AT#f%,3,40
1380  INK#f%,4
1390  PRINT#f%,"http://programandala.net"
1400  INK#f%,7
1410  CSIZE#f%,1,1
1420  AT#f%,3,2
1430  PRINT#f%,"Teksto:"
1440 :
1450  REMark Ventana de entrada:
1460  t%=FOP_OVER(con_347x120a18x85)
1470  IF t%<0:trata_error(t%)
1480  PAPER#t%,4
1490  INK#t%,0
1500  CLS#t%
1510  BORDER#t%,2
1520  CSIZE#t%,1,0
1530  INPUT#t%,texto$
1540  IF NOT LEN(texto$):EXIT bucle
1550 :
1560  REMark Ventana de listado:
1570  l%=FOP_OVER(scr_120x120a372x85)
1580  IF l%<0:trata_error(l%)
1590  PAPER#l%,0
1600  INK#l%,7
1610  CLS#l%
1620  BORDER#l%,1,7
1630  PRINT#l%,"     CXIFRADO"
1640  CLOSE#l%
1650  l%=FOP_OVER(scr_110x105a381x98)
1660  IF l%<0:trata_error(l%)
1670  PAPER#l%,0
1680  INK#l%,7
1690  CLS#l%
1700  texto_cifrado$=cifrado$(texto$,l%)
1710  INK#t%,7
1720  PRINT#t%,texto_cifrado$
1730  INK#t%,0
1740  PRINT#t%,cifrado$(texto_cifrado$,l%)
1750 :
1760  e%=FOP_OVER(con_477x42a18x210)
1770  IF e%<0:trata_error(e%)
1780  INK#e%,0
1790  PAPER#e%,7
1800  CLS#e%
1810 :
1820  PRINT#e%," 1 = registri kiel linion REMark por enmeti en BASIC-programon"
1830  PRINT#e%," 2 = registri kiel linion DEFM por enmeti en Z80-programon"
1840  PRINT#e%," 3 = registri kiel bajtaron"
1850  opción$=""
1860  REPeat pide_opción
1870   AT#e%,3,1
1880   CLS#e%,4
1890   INPUT#e%,"Elektu:"!opción$
1900   IF LEN(opción$) AND opción$ INSTR "123":EXIT pide_opción
1910  END REPeat pide_opción
1920  opción=opción$
1930  SELect opción
1940   =1
1950    PRINT#d%,"1 REMark "&texto_cifrado$
1960   =2
1970    PRINT#d%,"       DEFM "&'"'&texto_cifrado$&'"'
1980   =3
1990    PRINT#d%,texto_cifrado$
2000  END SELect
2010 :
2020 END REPeat bucle
2030 :
2040 AT#f%,2,2
2050 CLS#f%,2
2060 CSIZE#f%,2,1
2070 AT#f%,6,18
2080 PRINT#f%,"FINO"
2090 CLOSE#d%
2100 IF FLEN(\fichero$)
2110   CSIZE#f%,1,1
2120   AT#f%,8,4
2130   PRINT#f%,"La rezulto trovigxas en la dosiero"!fichero$
2140 ELSE
2150   DELETE ram1_nomkasxilo_txt
2160 END IF
2170 CLOSE
2180 STOP
2190 :
2200 DEFine FuNction cifrado$(t$,corriente%)
2210   resultado$=""
2220   FOR carácter=1 TO LEN(t$)
2230     carácter_cifrado$=fórmula$(t$(carácter),carácter)
2240     resultado$=resultado$&carácter_cifrado$
2250     PRINT#corriente%,t$(carácter)!"="!CODE(t$(carácter)),"→"!carácter_cifrado$!"="!CODE(carácter_cifrado$)
2260   END FOR carácter
2270   RETurn resultado$
2280 END DEFine cifrado$
2290 :
2300 DEFine FuNction fórmula$(carácter$,posición%)
2310    RETurn CHR$(CODE(carácter$)^^255^^(LEN(texto$)-posición%+1))
2320 END DEFine fórmula$
2330 :
2340 DEFine PROCedure trata_error(n_error%)
2350  REPORT n_error%
2360  CLOSE
2370  STOP
2380 END DEFine trata_error
2390 :
2400 DEFine PROCedure s
2410   SAVE_O NomKasxilo_bas
2420   SAVE_O NomKasxilo_bak
2430 END DEFine s

Descargas

nomkasxilo_bas (3.60 KiB)