Module: sage.crypto.classical
Classical Cryptosystems
Class: HillCryptosystem
| self, S, m) |
Create a Hill cryptosystem defined by the m x m matrix space over Z/NZ where N is the alphabet size of the string monoid S.
Input: A string monoid S over some alphabet, and a block length m.
sage: S = AlphabeticStrings()
sage: E = HillCryptosystem(S,3)
sage: E
Hill cryptosystem on Free alphabetic string monoid on A-Z of block length 3
sage: R = IntegerModRing(26)
sage: M = MatrixSpace(R,3,3)
sage: A = M([[1,0,1],[0,1,1],[2,2,3]])
sage: A
[1 0 1]
[0 1 1]
[2 2 3]
sage: e = E(A)
sage: e
[1 0 1]
[0 1 1]
[2 2 3]
sage: e(S("LAMAISONBLANCHE"))
JYVKSKQPELAYKPV
TESTS:
sage: S = AlphabeticStrings() sage: E = HillCryptosystem(S,3) sage: E == loads(dumps(E)) True
Functions: block_length,
deciphering,
enciphering,
encoding,
inverse_key,
random_key
| self, A) |
sage: S = AlphabeticStrings()
sage: E = HillCryptosystem(S,3)
sage: A = E.random_key()
sage: B = E.inverse_key(A)
sage: M = S("LAMAISONBLANCHE")
sage: e = E(A)
sage: c = E(B)
sage: c(e(M))
LAMAISONBLANCHE
Special Functions: __call__,
__init__,
_repr_
| self, A) |
Create a Hill cipher.
Input: A matrix which specifies a block permutation.
sage: S = AlphabeticStrings()
sage: E = HillCryptosystem(S,3)
sage: E
Hill cryptosystem on Free alphabetic string monoid on A-Z of block
length 3
sage: M = E.key_space()
sage: A = M([[1,0,1],[0,1,1],[2,2,3]])
sage: A
[1 0 1]
[0 1 1]
[2 2 3]
sage: e = E(A)
sage: e
[1 0 1]
[0 1 1]
[2 2 3]
sage: m = S("LAMAISONBLANCHE")
sage: e(m)
JYVKSKQPELAYKPV
sage: c = e.inverse()
sage: c(e(m))
LAMAISONBLANCHE
Class: SubstitutionCryptosystem
| self, S) |
Create a substitution cryptosystem.
Input: A string monoid over some alphabet.
sage: M = AlphabeticStrings()
sage: E = SubstitutionCryptosystem(M)
sage: E
Substitution cryptosystem on Free alphabetic string monoid on A-Z
sage: K = M([ 25-i for i in range(26) ])
sage: K
ZYXWVUTSRQPONMLKJIHGFEDCBA
sage: e = E(K)
sage: m = M("THECATINTHEHAT")
sage: e(m)
GSVXZGRMGSVSZG
TESTS:
sage: M = AlphabeticStrings() sage: E = SubstitutionCryptosystem(M) sage: E == loads(dumps(E)) True
Functions: deciphering,
enciphering,
encoding,
inverse_key,
random_key
| self, K) |
sage: S = AlphabeticStrings()
sage: E = SubstitutionCryptosystem(S)
sage: K = E.random_key()
sage: L = E.inverse_key(K)
sage: M = S("THECATINTHEHAT")
sage: e = E(K)
sage: c = E(L)
sage: c(e(M))
THECATINTHEHAT
Special Functions: __call__,
__init__,
_repr_
| self, K) |
Create a substitution cipher.
Input: A key which is a permutation of the cryptosystem alphabet.
sage: M = AlphabeticStrings()
sage: E = SubstitutionCryptosystem(M)
sage: E
Substitution cryptosystem on Free alphabetic string monoid on A-Z
sage: K = M([ 25-i for i in range(26) ])
sage: K
ZYXWVUTSRQPONMLKJIHGFEDCBA
sage: e = E(K)
sage: m = M("THECATINTHEHAT")
sage: e(m)
GSVXZGRMGSVSZG
Class: TranspositionCryptosystem
| self, S, n) |
Create a transposeition cryptosystem of block length n.
Input: A string monoid S over some alphabet, and a block length n.
sage: S = AlphabeticStrings()
sage: E = TranspositionCryptosystem(S,14)
sage: E
Transposition cryptosystem on Free alphabetic string monoid on A-Z of block
length 14
sage: K = [ 14-i for i in range(14) ]
sage: K
[14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
sage: e = E(K)
sage: e(S("THECATINTHEHAT"))
TAHEHTNITACEHT
sage: S = AlphabeticStrings() sage: E = TranspositionCryptosystem(S,14) sage: E == loads(dumps(E)) True
Functions: deciphering,
enciphering,
encoding,
inverse_key,
random_key
Special Functions: __call__,
__init__,
_repr_
| self, K) |
Create a transposition cipher.
Input: A key which specifies a block permutation.
sage: M = AlphabeticStrings()
sage: E = TranspositionCryptosystem(M,14)
sage: E
Transposition cryptosystem on Free alphabetic string monoid on A-Z of block
length 14
sage: K = [ 14-i for i in range(14) ]
sage: K
[14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
sage: e = E(K)
sage: m = M("THECATINTHEHAT")
sage: e(m)
TAHEHTNITACEHT
Class: VigenereCryptosystem
| self, S, n) |
Create a Vigenere cryptosystem of block length n.
Input: A string monoid S over some alphabet, and a block length n.
sage: S = AlphabeticStrings()
sage: E = VigenereCryptosystem(S,14)
sage: E
Vigenere cryptosystem on Free alphabetic string monoid on A-Z of period 14
sage: K = S('ABCDEFGHIJKLMN')
sage: K
ABCDEFGHIJKLMN
sage: e = E(K)
sage: e
ABCDEFGHIJKLMN
sage: e(S("THECATINTHEHAT"))
TIGFEYOUBQOSMG
TESTS:
sage: S = AlphabeticStrings() sage: E = VigenereCryptosystem(S,14) sage: E == loads(dumps(E)) True
Functions: deciphering,
enciphering,
encoding,
inverse_key,
random_key
| self, K) |
sage: S = AlphabeticStrings()
sage: E = VigenereCryptosystem(S,14)
sage: K = E.random_key()
sage: L = E.inverse_key(K)
sage: M = S("THECATINTHEHAT")
sage: e = E(K)
sage: c = E(L)
sage: c(e(M))
THECATINTHEHAT
Special Functions: __call__,
__init__,
_repr_
| self, K) |
Create a Vigenere cipher.
Input: A key which specifies a block permutation.
sage: S = AlphabeticStrings()
sage: E = VigenereCryptosystem(S,14)
sage: E
Vigenere cryptosystem on Free alphabetic string monoid on A-Z of period 14
sage: K = S('ABCDEFGHIJKLMN')
sage: K
ABCDEFGHIJKLMN
sage: e = E(K)
sage: e
ABCDEFGHIJKLMN
sage: e(S("THECATINTHEHAT"))
TIGFEYOUBQOSMG