簡體   English   中英

額外的尾隨零(或缺少零)Java / PHP

[英]Extra Trailing Zero (or missing zero) Java/PHP

背景

我正在開發Bukkit插件(Minecraft服務器端)。 該插件允許玩家相互之間來回發送消息。 我也在網絡界面上工作。 為了查看他們的“收件箱”,他們必須首先使用可以在游戲中設置的密碼登錄。

此密碼不是原始存儲的,它會轉換為一長串unicode值,然后分解成段,每個都轉換為十六進制並附加到其他字符串中。

Java版本

//This isn't the best method, I know, but it's still going to take a genius to crack it.
//The resulting number (before somewhat converted to hex) is really
//long, there isn't an easy way of knowing the sequence of characters.
//This conversion is much different than straight up converting to hex,
//as PHP has certain limitations
public static String encodePassword(String password) {
    String longNumber = "";
    for(int i = 0; i < password.length(); i++) {
        longNumber += ((int) password.charAt(i));
    }
    //System.out.println("long = " + longNumber);
    String result = "";
    int splitLength = 5;
    int iterations = longNumber.length() / splitLength;
    if(longNumber.length() % splitLength > 0)
        iterations++;
    for(int i = 0; i < iterations; i++) {
        //System.out.println(result);
        int start = splitLength * i;
        if(longNumber.length() - start <= splitLength) {
            String sub = longNumber.substring(start);
            result += Integer.toHexString(Integer.parseInt(sub));
            continue;
        }
        String sub = longNumber.substring(start, start + splitLength);
        result += Integer.toHexString(Integer.parseInt(sub));
    }
    return result;
}

PHP版本

function encodePassword($pw){
    $unicode = "";
    for($i=0; $i<strlen($pw); $i++){
        $char = $pw{$i};
        $val = unicode_value($char);
        $unicode = $unicode.$val;
    }
    $result = "";
    $splitLength = 5;
    $iterations = strlen($unicode) / $splitLength;
    if(strlen($unicode) % $splitLength > 0)
        $iterations++;
    for($i = 0; $i < $iterations; $i++) {
        $start = $splitLength * $i;
        if(strlen($unicode) - $start <= $splitLength) {
            $sub = substr($unicode, $start);
            $result = $result.base_convert($sub, 10, 16);
            continue;
        }
        $sub = substr($unicode, $start, $splitLength);
        $result = $result.base_convert($sub, 10, 16);
    }
    return $result;
}

如果我對口令“ partychat”(插件的名稱,也具有群聊功能)進行“編碼”,那么我在Java中會得到2c212c93ef23163a91bcc ,在PHP中會得到2c212c93ef23163a91bcc0 (除了結尾0以外,其他都相同)。 我做錯了什么嗎?

注意: 這種情況並非總是會發生,大多數“編碼”都可以正常工作,但是由於某種原因,這種情況有時會發生

您為什么還要這么做,我只使用userpassword的哈希,例如: 這個關於SHA-256的stackoverflow問題 ,我知道它不能解決您的問題,但是更安全的是不發明自己的加密標准:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM