Development

從 BigInteger 獲取私鑰

  • August 16, 2014

我有一個BigInteger代表私鑰的。如何將該私鑰作為 base58 編碼的字元串?以下虛擬碼無法正常工作:

base58.encode(bigInt.toByteArray) 
// yields a string that differs from given bigInt's private key

更新

def fullDoubleSha(bytes: ArrayOfByte) = {
 val digestSha = MessageDigest getInstance "SHA-256"
 digestSha digest digestSha.digest(bytes)
}

def getPrivBytes(key: BigInteger) = key.toByteArray match { case keyBytes =>
 val res = if (keyBytes.head == 0) keyBytes drop 1 else keyBytes
 new Array(32 - res.length) ++ res
}

def privBytesToWif(vs: ArrayOfByte) = {
 val rawPrivKey = Array(0x80.toByte) ++ vs
 rawPrivKey ++ fullDoubleSha(rawPrivKey).take(4)
}

base58 私鑰格式包括基於 SHA256 的校驗和。有關詳細資訊,請參閱此答案(忽略問題中私鑰本身是某些其他數據的 SHA256 雜湊的部分)。

引用自:https://bitcoin.stackexchange.com/questions/30083