如何创建一个空的[u8]
然后我可以传递给openssl函数,以便将结果写入它?
fn test_encrypt(key_pair: openssl::rsa::Rsa) {
let text = b"Hello";
println!("{:?}", text);
let mut result = b" ";
let pad = openssl::rsa::Padding::from_raw(1);
key_pair.private_encrypt(text, result, pad);
}
我的代码目前导致以下错误:
error[E0308]: mismatched types
--> src/main.rs:20:36
|
20 | key_pair.private_encrypt(text, result, pad);
| ^^^^^^ types differ in mutability
|
= note: expected type `&mut [u8]`
found type `&[u8; 0]`
答案 0 :(得分:3)
阅读错误消息将对您有所帮助; 不匹配类型,类型的可变性,预期类型&mut [u8]
,找到类型&[u8; 0]
。您的问题不在于如何创建阵列,而是您不能创建正确的阵列类型。
Printing the type of the variable会显示b" "
为数组创建&[u8; 1]
- 不可变引用。您尝试的内容并不重要,您无法写入此数据。实际上,它存储在已编译的可执行文件中的静态数据中。
相反,你需要一些可以用作可变片的东西。两种主要方法是创建实际数组或Vec
:
// Array
let mut result = [0; 24];
key_pair.private_encrypt(text, &mut result, pad);
// Vec
let mut result = vec![0; 24];
key_pair.private_encrypt(text, &mut result, pad);
数组是堆栈分配的,并且具有必须相等的固定大小和容量。向量是堆分配的,具有可能彼此不同的动态大小和容量。
这两个都可以取消引用&mut [u8]
。
为数组或向量选择合适的大小是特定于应用程序的。检查OpenSSL文档是正确的做法。
答案 1 :(得分:2)
private_encrypt()
方法需要一个足够长的缓冲区(key_pair.size()
字节)的可变片段。变化
let mut result = b" ";
key_pair.private_encrypt(text, result, pad);
到
let mut result = vec![0; key_pair.size()];
key_pair.private_encrypt(text, &mut result, pad);