Версия Minecraft
1.7.10
1,976
68
220
Доброго времени суток о/

Столкнулся с такой фигнёй, что на сервере на Термосе хеш-функции не работают как собственно хеш-функции (на одинаковый вход одинаковый выход)
Собственно, выдаю себе три одинаковых предмета из NEI, жму на каждом ПКМ, вызывая хеш от связки ника и названия предмета, а дальше происходит веселье:
OLJ233rFh8o.jpg

На клиенте хеш работает правильно. А на сервере совсем нет (проверено на названиях без спецсимволов - тоже самое)
Да-да, внаглую спижжен позаимствован из Ботании.
Java:
    {
        // ...
        merge(player.getCommandSenderName(), stack.getDisplayName()) // ...
        // ...
    }
    
    String merge(String s1, String s2) {
        String s = "";
        for (int i = 0; i < s1.length(); i++) for (int j = 0; j < s2.length(); j++) s += (char) ((s1.charAt(i) * s2.charAt(j)) % 256);
        return hash(s);
    }
    
    String hash(String str) {
        if(str != null)
            try {
                MessageDigest md = MessageDigest.getInstance("SHA-256");
                return new HexBinaryAdapter().marshal(md.digest(salt(str).getBytes(Charset.forName("UTF-8"))));
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
        return "";
    }

    // Might as well be called sugar given it's not secure at all :D
    String salt(String str) {
        str = str += "wellithoughtthatthisiscoolideaandicanmakesomethinglikethis#whynot";
        SecureRandom rand = new SecureRandom(str.getBytes(Charset.forName("UTF-8")));
        int l = str.length();
        int steps = rand.nextInt(l);
        char[] chrs = str.toCharArray();
        for(int i = 0; i < steps; i++) {
            int indA = rand.nextInt(l);
            int indB;
            do {
                indB = rand.nextInt(l);
            } while(indB == indA);
            char c = (char) (chrs[indA] ^ chrs[indB]);
            chrs[indA] = c;
        }

        return String.copyValueOf(chrs);
    }
Проверил в сингле - работает.
Проверил на ванильном сервере - всё окей.
Клиент-сайд на сервере с термосом проходит (что логично), а вот сам сервер - нет.

Подскажите, пожалуйста, в чём может быть лажа и как эту лажу фиксить?
Заранее спасибо
 
Сверху