https://kotlinlang.org logo
#announcements
Title
# announcements
x

xenoterracide

08/22/2019, 8:25 PM
I’m implementing this https://www.rabbitmq.com/passwords.html#computing-password-hash, how can I generate this as a byte array in kotlin?
908D C60A
note: I don’t mean generate a salt I mean literally these bytes, I’m trying to test my algorithm and see if I get the same base64 encoded string
s

Shawn

08/22/2019, 8:34 PM
Byte
is signed by default in Kotlin, so
0x90
is out of range - you could use the experimental unsigned types but that might open up a different can of worms
assuming by “generate this as a byte array” you mean, like, assign this as a literal to compare against, then you’d want something like this I think:
Copy code
ubyteArrayOf(0x90u, 0x8Du, 0xC6u, 0x0Au)
x

xenoterracide

08/22/2019, 8:41 PM
hmm
m

Marko Mitic

08/22/2019, 8:42 PM
actually, it will work just fine without unsigned
s

Shawn

08/22/2019, 8:43 PM
how do you mean? am I thinking about this the wrong way?
m

Marko Mitic

08/22/2019, 8:43 PM
it will just be negative if you read it without additional transformation
s

Shawn

08/22/2019, 8:43 PM
ah, I see
what I was more trying to address is the fact you still can’t do, like,
byteArrayOf(0x90)
, since that’s a compile error
could call
.toByte()
on each int I guess 😬
x

xenoterracide

08/22/2019, 8:46 PM
I wonder if they’re supposed to be characters
Concatenate that with the UTF-8 representation of the password (in this case
test12
):
908D C60A 7465 7374 3132
though I haven’t been able to figure out how they’re encoded for that encoding to line up with
test12
frustrating
s

Shawn

08/22/2019, 8:48 PM
ah, I see
unfortunately I also don’t know 😅
m

Marko Mitic

08/22/2019, 8:50 PM
it's just hex representation of bytes
so, you're working with bytes entire time, until you do base64 conversion
ask if there is anything unclear
@xenoterracide
x

xenoterracide

08/22/2019, 8:56 PM
@Marko Mitic so how’re you suggesting I write it? I’m not used to working with raw bytes, especially not like this
is
ubyteArrayOf
new in 1.3? if so… I’m still using 1.2
m

Marko Mitic

08/22/2019, 9:01 PM
gimme a bit
x

xenoterracide

08/22/2019, 9:01 PM
ok
m

Marko Mitic

08/22/2019, 9:04 PM
Copy code
import kotlin.random.Random
import kotlin.text.Charsets.UTF_8

fun a(pass: String, seed: Long): String {
    val random = Random(seed)
    val salt: ByteArray = random.nextBytes(4)

    val passBytes = pass.toByteArray(charset = UTF_8)
    val toHash = salt + passBytes
    val hashed = sha256(toHash)
    return toBase64(salt + hashed)
}

fun sha256(toHash: ByteArray): ByteArray {
    TODO("not implemented")
}

fun toBase64(bytes: ByteArray): String {
    TODO("not implemented")
}
sha256, base64 (and random/seed) might depend on your platform
so I didn't type it out
x

xenoterracide

08/22/2019, 9:06 PM
yeah I’ve got an implementation from spring
just trying to test it
so yeah, can’t use ubytes yet …
4 Views