gpt4 book ai didi

rust - 如何在Rust中定义&mut [u8]

转载 作者:行者123 更新时间:2023-12-03 11:44:52 24 4
gpt4 key购买 nike

我想调用 openssl::sign::Signer::sign ,它具有签名:

pub fn sign(&self, buf: &mut [u8]) -> Result<usize, ErrorStack>
我正在尝试移交 buf。我该如何使其成为 &mut [u8]
cargo.toml
[dependencies]
openssl = { version = "0.10", features = ["vendored"] }
src/main.rs
use openssl::{base64, sign::Signer};

fn main() {
let mut buffer = [];
let str = base64::encode_block(signer.sign(&mut buffer));
}
但是得到一个错误:
openssl::base64::encode_block(signer.sign(&mut buffer));
^^^^^^^^^^^^^^^^^^^ expected `&[u8]`, found enum `std::result::Result`

最佳答案

我不熟悉此 crate ,但 base64::encode_block 需要&[u8],而 Signer::sign 的返回值是Result,它返回写为usize的字节数。
我不确定写入的字节数是否要编码?
如果要将buffer编码为base64,则可以执行以下操作:

use openssl;

fn main() {
let mut buf = [104, 101, 108, 108, 111];
let encoded = openssl::base64::encode_block(&buf);

println!("{}", encoded);
}
那应该给你:
aGVsbG8=
这是 hello作为 base64
或者,例如,如果要对给定的 sign进行 buf并将其编码为 base64:
use openssl::{base64, hash::MessageDigest, pkey::PKey, rsa::Rsa, sign::Signer};

fn main() {
let keypair = Rsa::generate(2048).unwrap();
let keypair = PKey::from_rsa(keypair).unwrap();
let signer = Signer::new(MessageDigest::sha256(), &keypair).unwrap();

let mut buf = [104, 101, 108, 108, 111].repeat(52);

let written = signer.sign(&mut buf).unwrap();
println!("bytes written: {}", written);

let encoded = base64::encode_block(&buf);
println!("base64: {}", encoded);
}
哪个返回:
bytes written: 256
base64: wB4lBbyzpfRPInxhwm0XVKI3dQYqcUZWNdKyb4RTGDUmwq1DDDbQjMRmFBobRse3pNOxoMy+QQNSXsgI46b75hPfkar9TUowrIGk4Y+ZWWX/cwNJCJazC1dfanP4uft0fzpYJKMSfJTAxswccu1g4yT+u0V5yq+eHbeGDJ+bF2MMhCPds7wGjJguxO0e4wx+HQdVGbU9jrHQ38oIYTChG92iKLRpciiyB8vrbNEBcNNi4hlw6U0sUdz6scpXceREdPFVA6wr0otY3wSZLfcIeKELoBQkR2KPNTTCROreVJ49tXwiQdGe7Ky0NDeNba2H5tKu3uLAtAiG/hVoKEAJG2VsbG8=

关于rust - 如何在Rust中定义&mut [u8],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63498592/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com