Ir al contenido principal

Criptografía (CCLXIV): La escítala espartana en Excel

Ya puse una entrada con un script en python para cifrar y descifrar utilizando la escítala espartana.

Y ahora, en este post incluyo el cifrado y descifrado utilizando este mismo criptosistema en Excel

Antes de poner el correspondiente código Visual Basic para aplicaciones (VBA), recordar que este cifrado se basa en sendas varas de grosor igual o similar que debían estar en posesión del emisor y del receptor del mensaje secreto, que se escribía en una cinta de cuero enrollada en una de las varas, y después se enviaba la cinta al receptor del mensaje.

El código es el siguiente:
' LA ESCÍTALA ESPARTANA:
'
' Cifra y descifra textos en claro y criptogramas, respectivamente,
' utilizando la escítala espartana.
'
' http://mikelgarcialarragan.blogspot.com/

Option Explicit
Public TEXTO_CLARO As Range
Public GROSOR As Range
Public CRIPTOGRAMA As Range
Public Sub Cifrar()
    Dim Longitud As Integer
    Dim i As Integer
    Dim j As Integer

    Range("TEXTO_CLARO").Value = A_Z(UCase(Replace(Range("TEXTO_CLARO").Value, " ", "")))
    
    If Len(Range("TEXTO_CLARO").Value) = 0 Then
        MsgBox "Introduzca el texto en claro a cifrar. Sólo caracteres alfabéticos [A-Z], 'Ñ' excluida.", vbOKOnly + vbCritical, "¡Error!"
    Else
        If Range("GROSOR").Value < 1 Or Range("GROSOR").Value > 26 Then
            MsgBox "El grosor (número de filas) debe seer un número comprendido entre 1 y 26.", vbOKOnly + vbCritical, "¡Error!"
            Range("GROSOR").Value = 3
        Else
            Range("CRIPTOGRAMA").Value = ""
            If Len(Range("TEXTO_CLARO").Value) Mod Range("GROSOR").Value = 0 Then
                Longitud = Len(Range("TEXTO_CLARO").Value) \ Range("GROSOR").Value
            Else
                Longitud = Len(Range("TEXTO_CLARO").Value) \ Range("GROSOR").Value + 1
            End If
            Range("TEXTO_CLARO").Value = Range("TEXTO_CLARO").Value & Space(Range("GROSOR").Value * Longitud - Len(Range("TEXTO_CLARO").Value))
            j = 1
            For i = 1 To Longitud
                For j = j To Len(Range("TEXTO_CLARO").Value) Step Longitud
                    Range("CRIPTOGRAMA").Value = Range("CRIPTOGRAMA").Value & Mid(Range("TEXTO_CLARO").Value, j, 1)
                Next j
                j = i + 1
            Next i
        End If
    End If

End Sub
Public Sub Descifrar()
    Dim i As Integer
    Dim j As Integer

    Range("CRIPTOGRAMA").Value = A_Z(UCase(Range("CRIPTOGRAMA").Value))
    
    If Len(Range("CRIPTOGRAMA").Value) = 0 Then
        MsgBox "Introduzca el criptograma a descifrar. Sólo caracteres alfabéticos [A-Z], 'Ñ' excluida.", vbOKOnly + vbCritical, "¡Error!"
    Else
        If Range("GROSOR").Value < 1 Or Range("GROSOR").Value > 26 Then
            MsgBox "El grosor (número de filas) debe seer un número comprendido entre 1 y 26.", vbOKOnly + vbCritical, "¡Error!"
            Range("GROSOR").Value = 3
        Else
            Range("TEXTO_CLARO").Value = ""
            j = 1
            For i = 1 To Range("GROSOR").Value
                For j = j To Len(Range("CRIPTOGRAMA").Value) Step Range("GROSOR").Value
                    Range("TEXTO_CLARO").Value = Range("TEXTO_CLARO").Value & Mid(Range("CRIPTOGRAMA").Value, j, 1)
                Next j
                j = i + 1
            Next i
        End If
    End If

End Sub
Function A_Z(Cadena As String) As String
    Dim Caracter As Integer

    For Caracter = 1 To Len(Cadena)
        Select Case Asc(Mid(Cadena, Caracter, 1))
            Case 32, 65 To 90:
                A_Z = A_Z & Mid(Cadena, Caracter, 1)
        End Select
    Next

End Function


Ejemplo de funcionamiento:

Cifrar:

Descifrar:

Quizás también te interese:

Comentarios

Entradas populares de este blog

Criptografía (I): cifrado Vigenère y criptoanálisis Kasiski

Hace unos días mi amigo Iñaki Regidor ( @Inaki_Regidor ), a quien dedico esta entrada :), compartió en las redes sociales un post titulado "Criptografía: el arte de esconder mensajes"  publicado en uno de los blogs de EiTB . En ese post se explican ciertos métodos clásicos para cifrar mensajes , entre ellos el cifrado de Vigenère , y , al final del mismo, se propone un reto consistente en descifrar un mensaje , lo que me ha animado a escribir este post sobre el método Kasiski  para atacar un cifrado polialfabético ( conociendo la clave descifrar el mensaje es muy fácil, pero lo que contaré en este post es la forma de hacerlo sin saberla ). El mensaje a descifrar es el siguiente: LNUDVMUYRMUDVLLPXAFZUEFAIOVWVMUOVMUEVMUEZCUDVSYWCIVCFGUCUNYCGALLGRCYTIJTRNNPJQOPJEMZITYLIAYYKRYEFDUDCAMAVRMZEAMBLEXPJCCQIEHPJTYXVNMLAEZTIMUOFRUFC Como ya he dicho el método de Vigenère es un sistema de sustitución polialfabético , lo que significa que, al contrario que en un sistema de

Criptografía (XXIII): cifrado de Hill (I)

En este post me propongo explicar de forma comprensible lo que he entendido sobre el cifrado de Hill , propuesto por el matemático Lester S. Hill , en 1929, y que se basa en emplear una matriz como clave  para cifrar un texto en claro y su inversa para descifrar el criptograma correspondiente . Hay tres cosas que me gustan de la criptografía clásica, además de que considero que ésta es muy didáctica a la hora de comprender los sistemas criptográficos modernos: la primera de ellas es que me "obliga" a repasar conceptos de matemáticas aprendidos hace mucho tiempo y, desgraciadamente, olvidados también hace demasiado tiempo, y, por consiguiente, que, como dice  Dani , amigo y coautor de este blog, me "obliga" a hacer "gimnasia mental"; la segunda es que, en la mayoría de las ocasiones, pueden cifrarse y descifrase los mensajes, e incluso realizarse el criptoanálisis de los criptogramas, sin más que un simple lápiz y papel, es decir, para mi es como un pasat

¿Qué significa el emblema de la profesión informática? (I)

Todas o muchas profesiones tienen un emblema que las representa simbólicamente y en el caso de la  informática: " es el establecido en la resolución de 11 de noviembre de 1977  para las titulaciones universitarias superiores de informática, y  está constituido por una figura representando en su parte central  un  núcleo toroidal de ferrita , atravesado por  hilos de lectura,  escritura e inhibición . El núcleo está rodeado por  dos ramas : una  de  laurel , como símbolo de recompensa, y la otra, de  olivo , como  símbolo de sabiduría. La  corona  será la  de la casa real  española,  y bajo el escudo se inscribirá el acrónimo de la organización. ". Veamos los diferentes elementos tomando como ejemplo el emblema del COIIE/EIIEO (Colegio Oficial de Ingenieros en Informática del País Vasco/ Euskadiko Informatikako Ingeniarien Elkargo Ofiziala ) . Pero no sólo el COIIE/EIIEO adopta el emblema establecido en dicha resolución, sino que éste se adopta también como im