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