Байт массивіне жол, содан кейін Java ішіндегі MD5

соңғы 5 сағаттан кейін қарапайым болуы керек нәрсе жасауға тырысамын және оны C# -де 10 минутта істедік, бірақ Java-мен сәттілік болмады. Мен 32 UpperCase және сандық жолды (A-Z0-9) алдым, осы сілтемені желтоқсанға айналдырып, одан кейін md5 оны қайтадан түрлендіру керек. Мәселе мынада, мен өзімнің белгісіз байттарым жоқ, сондықтан менің массивім md5 мүмкін емес: \

Міне, питонда істеуім керек:

salt = words[1].decode("hex")
passwordHash = generatePasswordHash(salt, pw)
generatePasswordHash(salt, password):
    m = md5.new()
    m.update(salt)
    m.update(password)
    return m.digest()

және C# -де:

public static string GeneratePasswordHash(byte[] a_bSalt, string strData) {
    MD5 md5Hasher = MD5.Create();

    byte[] a_bCombined = new byte[a_bSalt.Length + strData.Length];
    a_bSalt.CopyTo(a_bCombined, 0);
    Encoding.Default.GetBytes(strData).CopyTo(a_bCombined, a_bSalt.Length);

    byte[] a_bHash = md5Hasher.ComputeHash(a_bCombined);

    StringBuilder sbStringifyHash = new StringBuilder();
    for (int i = 0; i < a_bHash.Length; i++) {
        sbStringifyHash.Append(a_bHash[i].ToString("X2"));
    }

    return sbStringifyHash.ToString();
}

protected byte[] HashToByteArray(string strHexString) {
    byte[] a_bReturn = new byte[strHexString.Length/2];

    for (int i = 0; i < a_bReturn.Length; i++) {
        a_bReturn[i] = Convert.ToByte(strHexString.Substring(i * 2, 2), 16);
    }

    return a_bReturn;
}

Мен осыдан көмек алуға өте қуаныштымын :)

2
'32 UpperCase және сандық жолақ (A-Z0-9) дегеніміз не?
қосылды автор EJP, көзі
Менің ойымша, Python - оның бастапқы тілі. Ол Java/C # түрлендіруге тырысады, бірақ Java-де мүмкін емес.
қосылды автор Perception, көзі
Java немесе Python? Сіз оны шатастырып жатырсыз.
қосылды автор Marcelo, көзі
Мен жоғарыда аталған Phyton және C# кодтарын Java-ға айналдыруға тырысамын.
қосылды автор user1018517, көзі

3 жауаптар

Hex жолын байтқа талдау: (байт) Integer.parseInt (s, 16) .

Құпия сөз жолын байтты массивке айналдыру үшін әдепкі кодтаманы қолданыңыз (олай істеуді ұсынамын: әрқашан нақты кодтауды көрсетіңіз): password.getBytes() (немесе password.getBytes ( кодтау) ).

Байт массасын хэширлеу үшін: MessageDigest.getInstance («MD5»). Digest (байт []) .

To transform a byte to a hex String : See In Java, how do I convert a byte array to a string of hex digits while keeping leading zeros?

7
қосылды
байт - байт. Теріс сан немесе оң нәтиже ретінде қарастырылса, оның биттердің ішкі реттілігін өзгертпейді. Бұл сіздің соңғы хэшіңізді өзгертпеуі керек. Неге Java-кодты көрсетпейсіз?
қосылды автор JB Nizet, көзі
Жоғарыда аталғандардың бәрін қолдануға тырысыңыз, 246 белгісіз байт ретінде жұмыс жасамады -10 және менің соңғы хэшімді өзгертеді.
қосылды автор user1018517, көзі
pastebin.com/q41uYJL4 - қалай көре аласыз, мен ойлағандай, бұл оның жұмыс істейтін және деп ойлаймын :) Thanks көмек үшін.
қосылды автор user1018517, көзі

Бит маскаларын қолдану арқылы Java-да қол қойылмаған нөмірлерді пайдалануға болады. Толығырақ ақпаратты мұнда қараңыз.

1
қосылды
Md5 chars array мүмкін емес, маған көмектеспеңіз.
қосылды автор user1018517, көзі

Келесідей нәрсе жұмыс істейтініне сенімдімін:

// convert your hex string to bytes
BigInteger bigInt = new BigInteger(salt, 16);
byte[] bytes = bigInt.toByteArray();
// get the MD5 digest library
MessageDigest md5Digest = null;
try {
    md5Digest = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
   //error handling here...
}
// by default big integer outputs a 0 sign byte if the first bit is set
if (bigInt.testBit(0)) {
    md5Digest.update(bytes, 1, bytes.length - 1);
} else {
    md5Digest.update(bytes);
}
// get the digest bytes
byte[] digestBytes = md5Digest.digest();

byte [] массивіне алты жолды түрлендіруге арналған қосымша идеялар:

0
қосылды
SHA-1 үшін ұқсас шешім: stackoverflow.com/questions/ 4332740/sha1-hash-on-hex-string
қосылды автор Gray, көзі
Менің кодымдағы проблема BigInteger бірінші таңба биттік бит орнатылған болса, алдыңғы байтты 0 қосады. Мен қазір оны тіркедім.
қосылды автор Gray, көзі
Мына жерде қараңыз: pastebin.com/gxFT55rt - Мен тестілеуден өткен нәтижелер қандай болуы керек деп жаздым менің жұмыс істейтін Python қолданбасында.
қосылды автор user1018517, көзі
Жоғарыда көрсетілген жарнаманы жоғарыда көре алатыныңызға қарамастан, көмекке рахмет.
қосылды автор user1018517, көзі