Base16
Материал из InformationSecurity WIKI
Hex кодирование (или Base16) является одним из самых известных тк удобен для изучения файла пользователем.
Содержание
Чем выделяется
В нем может присутствовать следующий "алфавит":
0123456789ABCDEF
Проще говоря любой байт кодируется двумя "цифрами". И как вы можете заметить десятичные цифры в нем преобладают.
Где часто используется
Встретить кодирование вы можете в форенсике, вебе, криптографии ,PWN и стеганографии. Проще говоря почти везде.
Forensics
В том же WireShark пакет предоставляется как байты в HEX.
Примеров много, но я не могу припомнить.
Web
crypto
- Все хеши предоставляются нам строками, закодированными в hex.
- ???
Скрипты
python
"7061756c".decode("hex")
"cool".encode("hex")
perl
encode
$string = "6162636465666a68696a6b6c6d6e6f707172737475767778";
$string =~ s/([a-fA-F0-9][a-fA-F0-9])/chr(hex($1))/eg;
print "$string\n";
decode
$string = "abcdefjhijklmnopqrstuvwx";
$string =~ s/(.)/sprintf("%x",ord($1))/eg;
print "$string\n";
ruby
encode
class String
def to_hex
"0x" + self.to_i.to_s(16)
end
end
"116".to_hex
=> "0x74"
decode
$string = "6162636465666a68696a6b6c6d6e6f707172737475767778";
$string =~ s/([a-fA-F0-9][a-fA-F0-9])/chr(hex($1))/eg;
print "$string\n";
java
decode
public static void main(String[] args) {
String hex = "75546f7272656e7";
StringBuilder output = new StringBuilder();
for (int i = 0; i < hex.length(); i+=2) {
String str = hex.substring(i, i+2);
output.append((char)Integer.parseInt(str, 16));
}
System.out.println(output);
}
encode
public String toHex(String arg) {
return String.format("%040x", new BigInteger(1, arg.getBytes(/*YOUR_CHARSET?*/)));
}
Утилиты
Райтапы
ASIS Quals CTF 2015: Simple Algorithm
Tyrannosaurus Hex – 10 picoctf 2014 writeup