2015-06-18 20 views
7

Biraz kayboldum. Bir proje için, bir bayt dizisi olan bir karma işlevinin (SHA256) çıktısını taban 36 kullanılarak bir String'e dönüştürmem gerekiyor.Java: byte [] to base36 Dize

Bu nedenle, (Hex-String) dönüştürmek istiyorum base36 için

43A718774C572BD8A25ADBEB1BFCD5C0256AE11CECF9F9C3F925D0E52BEAF89 

olan) Hash temsili, bu yüzden, yukarıda örnek dize olacaktır: base36 gerçek dönüşüm için

3SKVHQTXPXTEINB0AT1P0G45M4KI8U0HR8PGB96DVXSTDJKI1 

ben StackOverflow burada kod bazı parçası bulundu :

210 Şimdi bu yapıyorum:

// this creates my hash, being a 256-bit byte array 
byte[] hash = PBKDF2.deriveKey(key.getBytes(), salt.getBytes(), 2, 256); 

System.out.println(hash.length); // outputs "256" 
System.out.println(toBase36(hash)); // outputs total crap 

"tamamen saçmalık"

-7-14-8-1q-5se81u0e-3-2v-24obre-73664-7-5-5cor1o9s-6h-4k6hr-5-4-rt2z0-30-8-2u-8-onz-4a2j-6-8-18-8trzza3-3-2x-6-4153to-4e3l01me-6-azz-2-k-4ckq-nav-gu-irqpxx-el-1j-6-rmf8hs-1bb5ax-3z25u-2-2r-t5-22-6-6w1v-1p 

gibi bir şey bu yüzden ne istiyorum yakın bile değil. Şimdi bir çözüm bulmaya çalıştım, ama burada biraz kaybolmuşum gibi görünüyor. İhtiyacım olan Hash'un base36 ile kodlanmış String gösterimini nasıl alabilirim?

+0

Çözüm işe yaradı, teşekkürler! – Xenonite

cevap

7

BigInteger kullanmayı deneyin:

String hash = "43A718774C572BD8A25ADBEB1BFCD5C0256AE11CECF9F9C3F925D0E52BEAF89"; 
String base36 = new BigInteger(hash , 16).toString(36).toUpperCase(); 
3

This işe yarayabilecek:

BigInteger büyük = new BigInteger (your_byte_array_to_hex_string, 16);

big.toString (36);