в криптобайтах обычно не подписаны;Поэтому я бы предложил «исправить» это несоответствие в среде Java, поменяв цикл таким образом:
for(int i = 0; i < 9; ++i) {
if(i > 0 && i % 3 == 0)
retVal += '-';
// bitwise AND with 0xff is to undo sign extension Java
// does by default
retVal += (char)('a' + (hash[i] & 0xff) % 26);
}
многие оригинальные скобки и приведения были избыточны, поэтому я удалил их.если ваши реализации только когда-либо будут Java и Python, не имеет значения, где вы «исправляете» эту
другую криптографическую точку;если вам действительно нужен текстовый одноразовый пароль, почему бы просто не сделать что-то вроде:
public static String get_otp2()
{
final SecureRandom rng = new SecureRandom();
String out = "";
for (int i = 0; i < 9; i++) {
if(i > 0 && i % 3 == 0)
out += '-';
out += (char)('a' + rng.nextInt(26));
}
return out;
}
и сохранить это где-нибудь?