Этот конкретный пример может быть преобразован как
data = ["308191300b06092a864886f70d01010d03818100" + body.unpack("H*")].pack("H*")
, где «308191300b06092a864886f70d01010d03818100» - это префикс, созданный из этого выражения ASN до поля BIT STRING (включая размер BIT STRING), pack ("H") преобразует двоичные данные в шестнадцатеричное представление, а unpack ("H") преобразует строку в шестнадцатеричное обратно в двоичный файл.
Но для более общего конвертера ASN лучше использовать OpenSSL :: ASN1, который поставляется с ruby в качестве стандартной библиотеки. Это совершенно недокументировано, но некоторым людям удалось использовать его