Я работаю над реализацией, в которой я должен преобразовать длинный хеш String
в BigInteger
и обратно (функция должна быть обратимой), но я не понимаю, как заставить его работать в Java сэти классы.
Моей первой идеей было сделать что-то следующим образом:
given s:String
for every character in the input string:
convert char to decimal ASCII representation (i.e. 'a' -> '97')
append result to s
build a BigDecimal with the resulting s
, но проблема в том (как прокомментировали многие пользователи) длины преобразования, потому что символы ASCII идут отОт 0 до 255. Его можно изменить с 'a' -> '97'
на 'a' -> '097'
, но опять-таки есть проблема с декодированием, убирающим нули заголовков для каждого символа (кстати, алгоритм менее эффективен)
Итак, в заключениепредложенный здесь алгоритм - не лучшая идея, поэтому я открыт для некоторых других решений.Также, если в String
и / или BigInteger
есть какая-либо библиотека или встроенный метод, это тоже полезно.Подпись
public class EncodeUtil {
public BigInteger encode(String s) {...}
public String decode(BigInteger bi) {...}
}
, и условие состоит в том, что decode(encode("som3_We1rd/5+ring"))
выводит "som3_We1rd/5+ring"
Я думаю, стоит сказать, что полученные строки для декодирования являются хешами, такими как lQ5jkXWRkrbPlPlsRDUPcY6bwOD8Sm/tvJAVhYlLS3WwE5rGXv/rFRzyhn4XpUovwkLj2C3zS1JPTQ1FLPtxNXc2QLxfRcH1ZRi0RKJu1lK8TUCb6wm3cDw3VRXd21WRsnYKg6q9ytR+iFQykz6MWVs5UGM5NPsCw5KUBq/g3Bg=
Любая идея / предложение приветствуется.Заранее спасибо за ваше время.