我正在尝试在C中使用

WinCrypt API.

我的应用程序需要密码,解密,签名和验证文件,一旦我有正确的密钥,我知道如何做到这一点.但我的问题实际上是,这与生成这些密钥的应用程序不同.

我所拥有的是PEM格式的文​​件中的公钥和私钥:

-----BEGIN RSA PRIVATE KEY-----

[Base64 encoded]

-----END RSA PRIVATE KEY-----

-----BEGIN RSA PUBLIC KEY-----

[Base64 encoded]

-----END RSA PUBLIC KEY-----

经过一些研究,我发现如何使用以下方法导入公钥:here和here:

> CreateFile& ReadFile读取文件内容

> CryptStringToBinary,使用CRYPT_STRING_BASE64HEADER将PEM格式转换为DER格式(从base64中删除页眉和页脚以及解码)

> CryptDecodeObjectEx with X509_PUBLIC_KEY_INFO

> CryptImportPublicKeyInfo,用于导入密钥

但现在,我的问题是用私钥做同样的事情.

任何帮助真的很感激:)

我正在尝试在C中使用WinCrypt API.我的应用程序需要密码,解密,签名和验证文件,一旦我有正确的密钥,我知道如何做到这一点.但我的问题实际上是,这与生成这些密钥的应用程序不同.我所拥有的是PEM格式的文​​件中的公钥和私钥:-----BEGIN RSA PRIVATE KEY-----[Base64 encoded]-----END RSA PRIVATE KEY-----而且:-----... 1、 打开 工程B,选择 项目 ->添加现有项,然后选择工程A的rc 文件 。 2、 导入 rc 文件 后,会在工程B的资源视图中看到自己的资源和工程A的资源。此时可以将需要拷贝的对话框复制,粘贴。 3、选中工程A的资源,然后选择 项目 -> 从项目中排除,即可。
当编译器出现 使用 的库与源码不匹配的报错时,处理方式如下: 1. 先看包含的源码的路径有没有正确包含进来,可是在代码中#include一个源码头 文件 试下是否正常。若不正常,则应该先查看下包含 文件 的路径是否正确包含。 2. 查看包含的新库的路径是否正常,确定引用的库是否全部引用!
微软在 win crypt .h中定义了大量的加解密算法的API,方便了软件加解密的实现,可以使我们不必关注密码学的算法,就可以实现高效率的软件加密。下面通过一个类,对API实现简单的封装。详细代码如下: 头 文件 :My Crypt Opt.h #pragma once #include " win dows.h" #include " win crypt .h" #define MY_EN
不说废话了,直接上代码了。。。 /*按行读取一个 pem 文件 所有字符并拼接为一整个字符串返回,去除首行、尾行及换行符*/ char* Load Pem File(char* pem FilePath,int* length) FILE* file; size_t size = 0; char* buff; file = fopen( pem FilePath,"rb"); if(file==NULL) return NULL; 在 C语言 使用 RSA 私钥 解密文本的步骤如下: 1. 首先,需要获取RSA 私钥 私钥 通常以 文件 的形式存储。 使用 C语言 文件 读取函数,如fopen和fread,读取 私钥 文件 的内容,并将其存储在一个变量中。 2. 将密文文本也读取到一个变量中。 3. 使用 C语言 的RSA库,加载 私钥 。可以 使用 openssl库或者其他类似的库。根据加载 私钥 的函数接口,将存储 私钥 的变量作为参数传递给该函数。加载成功后, 私钥 将被存储在内存中的一个结构体中,可以进行后续的解密操作。 4. 使用 加载的 私钥 ,调用解密函数对密文进行解密。解密函数的接口可能会要求传入待解密的密文以及一些其他选项。根据具体的库和函数接口,将存储密文的变量以及其他选项作为参数传递给解密函数。解密函数将返回明文信息。 5. 将解密后的明文信息进行处理,比如打印到屏幕上或存储到一个 文件 中。 需要注意的是,RSA 私钥 解密的过程中可能会涉及到一些异常处理的操作,比如加解密错误、内存不足等。因此,在实际的 C语言 代码中,需要进行适当的错误处理和异常判断。 以上是 使用 C语言 进行RSA 私钥 解密文本的基本步骤,具体的实现和细节可能会根据所采用的RSA库和函数接口而有所差异。 ### 回答2: 使用 RSA 私钥 解密文本在 C语言 中可以通过以下步骤完成。 首先,我们需要将 私钥 及待解密的密文 导入 到C程序中。 私钥 通常以 PEM 格式 存储在一个 文件 中,我们可以 使用 OpenSSL库中的函数来读取 私钥 文件 并将其存储在内存中。 接着,我们需要 使用 OpenSSL库中的函数将 PEM 格式 私钥 转换为RSA结构体。然后,我们可以 使用 RSA结构体中的 私钥 成员变量进行解密操作。 在读取待解密的密文之后,我们可以 使用 RSA 私钥 对其进行解密操作。 使用 OpenSSL库中提供的函数,我们可以将密文中的每个密文块(通常为128字节)传递给解密函数,并将解密后的明文保存在一个缓冲区中。 解密过程完成后,我们就可以 使用 得到的明文数据进行进一步的处理。如果需要保存解密后的明文到 文件 中,我们可以 使用 文件 操作相关的函数来实现。 需要注意的是,在 使用 OpenSSL库的过程中,我们需要包含相关的头 文件 ,并链接相应的库 文件 。 总结起来, 使用 RSA 私钥 解密文本在 C语言 中的主要步骤包括: 导入 私钥 文件 、转换 私钥 格式 、读取待解密的密文、 使用 私钥 进行解密、处理解密后的明文。当然,为了更好地理解整个过程以及具体实现方式,建议查阅相关的 C语言 和OpenSSL库的文档及示例代码。 ### 回答3: 在 C语言 中,要 使用 RSA 私钥 解密文本,可以 使用 OpenSSL库来实现。下面是一个简单的步骤: 1. 引入OpenSSL库: #include <openssl/rsa.h> #include <openssl/ pem .h> 2. 读取 私钥 文件 : FILE* file = fopen("private_key. pem ", "rb"); RSA* rsa = RSA_new(); rsa = PEM _read_RSAPrivateKey(file, &rsa, NULL, NULL); fclose(file); 3. 读取密文并解密: unsigned char* ciphertext; // 存储密文的一个字符数组 int ciphertext_len; // 密文长度 unsigned char* plaintext; // 存储解密后的明文的一个字符数组 // TODO: 从 文件 或其他来源读取密文,并获取其长度 int plaintext_len = RSA_private_de crypt (ciphertext_len, ciphertext, plaintext, rsa, RSA_PKCS1_PADDING); 4. 处理解密结果: if (plaintext_len == -1) { // 解密失败 ERR_print_errors_fp(stderr); // 可以添加处理错误的逻辑 } else { // 解密成功 printf("解密后的明文:\n%s\n", plaintext); // 内存释放 RSA_free(rsa); free(ciphertext); free(plaintext); 上述代码仅为示例,实际 使用 中可能需要进行适当的修改和改进。同时,还需要确保正确引入OpenSSL库,并正确配置编译环境。