Skip to content

Block ciphers

Liesware edited this page Jan 28, 2019 · 15 revisions

Block ciphers

DES algorithm video - 1

DES algorithm video - 2

In order to understand hex and type parameters read Hash

In order to understand encryption and decryption read Stream

AES

spec

AES algorithm video - 1

AES algorithm video - 2

Description: Block cipher and AES winner.

Key:128, 192, 256 bits.

Iv: 128 bits.

Uses: General propuse, Performance is impportant, FIPS 197, NIST.

RC6

spec

Description: Block cipher and AES finalist.

Key: 128, 192, 256 bits.

Iv: 128 bits.

Uses: General propuse, alternative to AES.

MARS

spec

Description: Block cipher and AES finalist.

Key: 128, 192, 256 bits.

Iv: 128 bits.

Uses: General propuse, alternative to AES.

Twofish

spec

Description: Block cipher and AES finalist.

Key: 128, 192, 256 bits.

Iv: 128 bits.

Uses: General propuse, alternative to AES.

Serpent

spec

Description: Block cipher and AES finalist.

Key: 128, 192, 256 bits.

Iv: 128 bits.

Uses: General propuse, alternative to AES.

CAST-256

spec

Description: Block cipher and AES finalist.

Key: 256 bits.

Iv: 128 bits.

Uses: General propuse, alternative to AES.

Camellia

spec

Description: Block cipher, The cipher has been approved for use by the ISO/IEC, the European Union's NESSIE project, the Japanese CRYPTREC.

Key: 128, 192, 256 bits.

Iv: 128 bits.

Uses: General propuse, alternative to AES.

Speck128

spec

Key: 128, 192, 256 bits.

Iv: 128 bits.

Uses: IoT

Simeck64

spec

Key: 128 bits.

Iv: 64 bits.

Uses: IoT


Modes of Operation

Modes of Operation video

CTR

spec

Description: Block cipher mode

Uses: Performance is important.

GCM

spec

Description: Block cipher mode

Uses: Authenticated encryption.

  • It only support "type":"string"
  • It doesn't support "algorithm":"SIMECK64"

How to ???

#!/usr/bin/env python

import socket
import json
import os,binascii

def sending(message):
	ip = '127.0.0.1'
	port = 6613
	BUFFER_SIZE = 65536
	s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
	s.connect((ip, port))
	s.send(message)
	data = s.recv(BUFFER_SIZE)
	s.close()
	return data

def stream(data_js):
	req=json.loads(data_js)
	print "Enc \n " + json.dumps(req) +"\n"
	data_js_n=sending(json.dumps(req))
	answ=json.loads(data_js_n)
	print "Recived enc: \n" + (json.dumps(answ)) +"\n\n\n"
	dec='{"algorithm":"AES","plaintext":"","iv":"b05691ef92cb9c9bb05691ef92cb9c9b",\
	"version":1,"key":"b05691ef92cb9c9bb05691ef92cb9c9b","operation":"dec","type":"string", "mode":"ctr"}'
	req=json.loads(dec)
	req["plaintext"]=answ["result"]
	print "Dec \n " + json.dumps(req) +"\n"
	data_js_n=sending(json.dumps(req))
	answ2=json.loads(data_js_n)
	print "Recived dec: \n" + (json.dumps(answ2)) +"\n\n\n"


data_js='{ "version": 1 , "algorithm":"AES" , "type":"string", "plaintext": "Hello world!", "hex": 0,"operation":"enc",\
"key":"b05691ef92cb9c9bb05691ef92cb9c9b","iv":"b05691ef92cb9c9bb05691ef92cb9c9b", "mode":"ctr" }'
stream(data_js)

In this example we encrypt and decrypt Hello world! string using AES with the key and iv given in CTR mode.

On data_js["algorithm"] can be one of {AES, RC6, MARS, Twofish, SERPENT, CAST256, CAMELLIA, SPECK128, SIMECK64 }

#!/usr/bin/env python

import socket
import json
import os,binascii

def sending(message):
	ip = '127.0.0.1'
	port = 6613
	BUFFER_SIZE = 65536
	s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
	s.connect((ip, port))
	s.send(message)
	data = s.recv(BUFFER_SIZE)
	s.close()
	return data

def stream(data_js):
	req=json.loads(data_js)
	print "Enc \n " + json.dumps(req) +"\n"
	data_js_n=sending(json.dumps(req))
	answ=json.loads(data_js_n)
	print "Recived enc: \n" + (json.dumps(answ)) +"\n\n\n"
	dec='{"algorithm":"AES","plaintext":"","iv":"b05691ef92cb9c9bb05691ef92cb9c9b",\
	"version":1,"key":"b05691ef92cb9c9bb05691ef92cb9c9b","operation":"dec","type":"string", "mode":"gcm" ,"adata":"ABCD"}'
	req=json.loads(dec)
	req["plaintext"]=answ["result"]
	print "Dec \n " + json.dumps(req) +"\n"
	data_js_n=sending(json.dumps(req))
	answ2=json.loads(data_js_n)
	print "Recived dec: \n" + (json.dumps(answ2)) +"\n\n\n"


data_js='{ "version": 1 , "algorithm":"AES" , "type":"string", "plaintext": "Hello world!", "hex": 0,"operation":"enc",\
"key":"b05691ef92cb9c9bb05691ef92cb9c9b","iv":"b05691ef92cb9c9bb05691ef92cb9c9b", "mode":"gcm" ,"adata":"ABCD"}'
stream(data_js)

In this example we encrypt and decrypt Hello world! string using AES with the key,iv,adata given in GCM mode.

On data_js["algorithm"] can be one of {AES, RC6, MARS, Twofish, SERPENT, CAST256, CAMELLIA, SPECK128}


Json to enc string (key and iv depends on algorithm you chose) in CTR mode

{ "version": 1 , "algorithm":"block flavor" , "type":"string", "plaintext": "your string", "hex":BOOL,
"operation":"enc", "key":"Hex stringsize=32-64","iv":"Hex stringsize=16-32", "mode":"ctr"}

Json to dec string (key and iv depends on algorithm you chose) in CTR mode

{ "version": 1 , "algorithm":"block flavor" , "type":"string", "plaintext": "your hex enc string ", 
"operation":"dec", "key":"Hex stringsize=32-64","iv":"Hex stringsize=16-32", "mode":"ctr"}
  • To enc/dec a file you need to change "type":"string" -> "type":"file" , "plaintext": "your hex enc string " -> "file":"your file"

  • To use enc/dec GCM mode you need to change "mode":"ctr"->"mode":"gcm" , add "adata":"your string" and "hex" parameters

  • "hex" parameter apply for "string" and "adata" parameter

You can’t perform that action at this time.