我需要在C#中重新创建Rust函数。到目前为止,这是我的C#:
public static string AsSha256Decimal(this string asci)
{
if (asci.IsDigitsOnly())
return asci;
byte[] hashBytes = asci.AsHashSha256();
StringBuilder builder = new StringBuilder();
foreach (byte a in hashBytes)
{
builder.Append(a);
}
return builder.ToString();
}
这是我的Rust代码:
extern crate openssl;
use self::openssl::bn::BigNum;
use self::openssl::sha::sha256;
use utils::error::BIG_NUMBER_ERROR;
fn encode_a_word() {
let blah = "blah";
let hash = sha256(blah.as_bytes());
let bignum = BigNum::from_slice(&hash).unwrap();
let final1 = bignum.to_dec_str().unwrap();
trace!("hash {:?} and final {:#?}", hash, final1)
}
我可以获取正确的SHA256哈希,但是无法获取正确的最终值。 hash
看起来像一个数字数组,而final1
是一个字符串,但是字符串中的数字并不一对一匹配。
hash
:
[139, 125, 241, 67, 217, 28, 113, 110, 207, 165, 252, 23, 48, 2, 47, 107, 66, 27, 5, 206, 222, 232, 253, 82, 177, 252, 101, 169, 96, 48, 173, 82]
final1
:
63094006986221797353605481996956262747240529547095446989928883355012717129042
我不明白bignum函数在做什么;使用bignum.to_dec_str
的行在做什么?看起来像是十进制包装;正确吗?
答案 0 :(得分:3)
来自documentation for the openssl crate:
fn to_dec_str(&self) -> Result<OpensslString, ErrorStack>
返回
self
的十进制字符串表示形式。