Category:Encryption/rol-ror
Jump to navigation
Jump to search
You are here | rol & ror
|
Description
- rol and rot state for rotate left and rotate right
- rol and rot are not reversible. They need to be used in tandem (one to encode and the other to decode).
Example
Asssembly
rol byte ptr [edx], 0xa3
ror byte ptr [edx], 0xbc
cmp byte ptr [edx], 0x38
Reversing
ENCODING DECODING ┌─────────────────┐ ┌─────────────────┐ │ initial letter? │ │ p │ └─────────────────┘ └─────────────────┘ │ ord(letter) ▲ ▼ │ chr(112 % 256) ┌─────────────────┐ ┌─────────────────┐ │ initial ordinal │ │ 112 │ └─────────────────┘ └─────────────────┘ │ rol 0xa3 ▲ ▼ │ ror 0xa3 ┌─────────────────┐ ┌─────────────────┐ │ initial value? │ │ 131 │ └─────────────────┘ └─────────────────┘ │ ror 0xbc ▲ ▼ │ rol 0xbc ┌─────────────────┐ ┌─────────────────┐ │ result = 0x38 │ ───► │ 0x38 │ └─────────────────┘ └─────────────────┘
The decryption can be performed in python as follows:
# Rotate left. Set max_bits to 8.
rol = lambda val, r_bits, max_bits=8: \
(val << r_bits%max_bits) & (2**max_bits-1) | \
((val & (2**max_bits-1)) >> (max_bits-(r_bits%max_bits)))
# Rotate right. Set max_bits to 8.
ror = lambda val, r_bits, max_bits=8: \
((val & (2**max_bits-1)) >> r_bits%max_bits) | \
(val << (max_bits-(r_bits%max_bits)) & (2**max_bits-1))
print chr(ror(rol(0x38,0xbc),0xa3)%256)
Pages in category "Encryption/rol-ror"
The following 3 pages are in this category, out of 3 total.