- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我尝试将公共(public) RSA key 加载到我的程序中。我在 C 中使用 openssl 库。 key 在 header crypt.h
文件中定义:
#define PUBLIC_KEY "-----BEGIN PUBLIC KEY-----\n" \
"MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuDcT2OiToi9edqil/3ha\n" \
"1MMrgqYvdYObRkb8C5SZtf8iv4LynuHi3hvEtybqFW84Uf2l3Dxuz3IWVp2v1C2f\n" \
"cUxwf+hFqL4Nt2Ww/XOKLtFXTSX/2fPYoelmLja2grHPSuFx6N4gtDUXRIGSYXIz\n" \
"c2GBx8lOiOP+qUguFmWZ9E0GiMLvh4XUQUzTGr4ZNNoc5LODdO0g7beFFqhntt9w\n" \
"EKdceGQtA7Zyt5l13x0lj+RONdPJkDFZrNGdqDwNUSog9mufpvR1P2UW09pC+lzy\n" \
"z32P+w0U3Za4zv4Btis9ky16vaqdN/KlDWJRt+4W9TQSAL0x9w708OQr0Sf2CXNq\n" \
"EobSLZ/aybe75yQmzFqmn10X+NuwTtJkArIKK7JONCBSxjohQmTZw0U497TCEHia\n" \
"itzgsHNLf1of31G/3GK5rCkm9fl39nnrg0yJi1cONTDjSHzKlrPhA584jFRD0CIO\n" \
"VNHYgsVLuFQuJ0WkZON8uEZELXN1ZyWnmPXH8wSwxjud65JD4JSQornCXorBMfxd\n" \
"DFEeeNk8tjgPMaCTLFNP/gfVDzkvcct9RoC8uZxHk8zgrGOwuxOZ/ZyihE7M8v0i\n" \
"+VwG9iMrPl8W3+KqunIt/FB4Le1vJ0yYorK64DRNdeMAIsYq2iFWO3GXNsX631/K\n" \
"EuZJS8tGNhK9dF5umo0GceUCAwEAAQ==\n" \
"-----END PUBLIC KEY-----\n"
RSA key 应该保存在 RSA *
结构中。我为此使用了一个全局变量。
RSA *rsaPubkey;
main()
调用一个函数,该函数将获取 PUBLIC_KEY
并将其传递给 rsaPubkey
。函数如下所示:
#include "crypt.h"
int EVP_PKEY_get_type(EVP_PKEY *pkey) {
if (!pkey)
return EVP_PKEY_NONE;
return EVP_PKEY_type(pkey->type);
}
int PublicRSAKeyToStruct(const char *pubKey) {
BIO* bio;
bio = BIO_new_mem_buf(pubKey, (int)sizeof(pubKey));
if (bio == NULL) {
printf("bio");
return -1;
}
EVP_PKEY* pkey;
PEM_read_bio_PUBKEY(bio, &pkey, NULL, NULL);
if (pkey == NULL) {
printf("pkey");
return -1;
}
int type = EVP_PKEY_get_type(pkey);
if (type != EVP_PKEY_RSA && type != EVP_PKEY_RSA2) {
printf("get type");
return -1;
}
rsaPubkey = EVP_PKEY_get1_RSA(pkey);
if (rsaPubkey == NULL) {
printf("pubkey");
return -1;
}
EVP_PKEY_free(pkey);
BIO_free(bio);
return 0;
}
我们这样调用函数:
status = PublicRSAKeyToStruct(PUBLIC_KEY);
if (status == -1) {
exit(EXIT_FAILURE);
}
我的问题是 PublicRSAKeyToStruct()
函数向我抛出以下用户定义的错误:
get type
这意味着我们未能通过 EVP_PKEY_get_type()
。我不明白为什么会这样。我也不知道问题是否出在前面的步骤上。
最佳答案
你的 PEM_read 调用失败了,因为你给它的 BIO 没有访问正确的数据,但你没有检查返回值,也没有初始化 pkey
所以即使它不是valid 你的 pkey == NULL
检查没有发现它。如系统手册页中所述(Windows 除外)或 on the web BIO_new_mem_buf
的第二个参数必须是缓冲区中的字节数,如果缓冲区包含以空字符结尾的 C 字符串,则必须为 -1——并且像您这样的字符串文字确实会产生以空字符结尾的字符串,因此-1 是合适的——但 sizeof(apointer)
两者都不是。
如果您给它一个有效的 EVP_PKEY*
,您的代码的其余部分是正确的并且可以正常工作。
关于c - 将 RSA 公钥从字符串传递到 RSA * 结构时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41652092/
我目前正在尝试基于哈希表构建字典。逻辑是:有一个名为 HashTable 的结构,其中包含以下内容: HashFunc HashFunc; PrintFunc PrintEntry; CompareF
如果我有一个指向结构/对象的指针,并且该结构/对象包含另外两个指向其他对象的指针,并且我想删除“包含这两个指针的对象而不破坏它所持有的指针”——我该怎么做这样做吗? 指向对象 A 的指针(包含指向对象
像这样的代码 package main import "fmt" type Hello struct { ID int Raw string } type World []*Hell
我有一个采用以下格式的 CSV: Module, Topic, Sub-topic 它需要能够导入到具有以下格式的 MySQL 数据库中: CREATE TABLE `modules` ( `id
通常我使用类似的东西 copy((uint8_t*)&POD, (uint8_t*)(&POD + 1 ), back_inserter(rawData)); copy((uint8_t*)&PODV
错误 : 联合只能在具有兼容列类型的表上执行。 结构(层:字符串,skyward_number:字符串,skyward_points:字符串)<> 结构(skyward_number:字符串,层:字符
我有一个指向结构的指针数组,我正在尝试使用它们进行 while 循环。我对如何准确初始化它并不完全有信心,但我一直这样做: Entry *newEntry = malloc(sizeof(Entry)
我正在学习 C,我的问题可能很愚蠢,但我很困惑。在这样的函数中: int afunction(somevariables) { if (someconditions)
我现在正在做一项编程作业,我并没有真正完全掌握链接,因为我们还没有涉及它。但是我觉得我需要它来做我想做的事情,因为数组还不够 我创建了一个结构,如下 struct node { float coef;
给定以下代码片段: #include #include #define MAX_SIZE 15 typedef struct{ int touchdowns; int intercepti
struct contact list[3]; int checknullarray() { for(int x=0;x<10;x++) { if(strlen(con
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Empty “for” loop in Facebook ajax what does AJAX call
我刚刚在反射器中浏览了一个文件,并在结构构造函数中看到了这个: this = new Binder.SyntaxNodeOrToken(); 我以前从未见过该术语。有人能解释一下这个赋值在 C# 中的
我经常使用字符串常量,例如: DICT_KEY1 = 'DICT_KEY1' DICT_KEY2 = 'DICT_KEY2' ... 很多时候我不介意实际的文字是什么,只要它们是独一无二的并且对人类读
我是 C 的新手,我不明白为什么下面的代码不起作用: typedef struct{ uint8_t a; uint8_t* b; } test_struct; test_struct
您能否制作一个行为类似于内置类之一的结构,您可以在其中直接分配值而无需调用属性? 前任: RoundedDouble count; count = 5; 而不是使用 RoundedDouble cou
这是我的代码: #include typedef struct { const char *description; float value; int age; } swag
在创建嵌套列表时,我认为 R 具有对列表元素有用的命名结构。我有一个列表列表,并希望应用包含在任何列表中的每个向量的函数。 lapply这样做但随后剥离了列表的命名结构。我该怎么办 lapply嵌套列
我正在做一个用于学习目的的个人组织者,我从来没有使用过 XML,所以我不确定我的解决方案是否是最好的。这是我附带的 XML 文件的基本结构:
我是新来的 nosql概念,所以当我开始学习时 PouchDB ,我找到了这个转换表。我的困惑是,如何PouchDB如果可以说我有多个表,是否意味着我需要创建多个数据库?因为根据我在 pouchdb
我是一名优秀的程序员,十分优秀!