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?*/)));
}


Утилиты

Cryptool



Райтапы

What the Hex

ASIS Quals CTF 2015: Simple Algorithm

Tyrannosaurus Hex – 10 picoctf 2014 writeup

Полезные ссылки

Hex to string converter

String to Hex converter

Официальная вики статья