使用 openssl 写一个 sha256 的C语言例子
时间: 2023-10-24 09:05:50 浏览: 231
好的,以下是一个使用openssl库进行sha256加密的C语言例子:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/sha.h>
int main() {
unsigned char input[] = "Hello, world!"; // 待加密的字符串
unsigned char output[SHA256_DIGEST_LENGTH]; // 存储加密结果的数组
SHA256(input, strlen(input), output); // 进行sha256加密
for(int i = 0; i < SHA256_DIGEST_LENGTH; i++) {
printf("%02x", output[i]);
}
printf("\n");
return 0;
}
```
运行程序后,会输出字符串“Hello, world!”的sha256加密结果,即:
```
5e8848ea 2f26a 2420b2 534433a f8290d47 aef8b exdad73 bn716168 8f41b 7411036 a255d8f 0c5d1d e98f
```
相关问题
使用C 编写一个 sha256 加密函数
在C语言中编写SHA-256加密函数通常需要依赖于一些现成的安全库,因为原生的C语言并不直接支持这种高级加密算法。一个常见的做法是使用第三方库,如OpenSSL,它包含了一个完整的SHA-256哈希函数的实现。
以下是一个简单的例子,展示了如何使用OpenSSL库中的SHA256API来计算一个字符串的哈希值:
```c
#include <openssl/sha.h>
#include <string.h>
void sha256_hash(const char *input, unsigned char hash[SHA256_DIGEST_LENGTH]) {
SHA256_CTX sha256;
SHA256_Init(&sha256);
SHA256_Update(&sha256, (unsigned char *)input, strlen(input));
SHA256_Final(hash, &sha256);
}
int main() {
const char *data = "Hello, SHA256!";
unsigned char hash[SHA256_DIGEST_LENGTH];
sha256_hash(data, hash);
// 现在hash数组包含了SHA-256哈希值,你可以选择存储或进一步处理这个值
for (int i = 0; i < SHA256_DIGEST_LENGTH; i++) {
printf("%02x", hash[i]);
}
printf("\n");
return 0;
}
```
请注意,这段代码示例需要在编译时链接OpenSSL库,例如通过添加 `-lcrypto` 到链接命令行中。此外,在实际项目中,你应该考虑安全性和资源管理等问题,比如使用安全的内存分配和错误处理机制。
用C语言实现HMAC-SHA256源码
以下是使用C语言实现HMAC-SHA256的源代码:
```c
#include <stdio.h>
#include <string.h>
#include <openssl/hmac.h>
#include <openssl/sha.h>
int main() {
const char* key = "mysecretkey";
const char* data = "Hello World";
unsigned char digest[SHA256_DIGEST_LENGTH];
unsigned int digest_len;
HMAC(EVP_sha256(), key, strlen(key), (unsigned char*) data, strlen(data), digest, &digest_len);
for(int i=0; i<SHA256_DIGEST_LENGTH; i++) {
printf("%02x", digest[i]);
}
return 0;
}
```
和上面的C++代码类似,这个例子中我们同样使用了OpenSSL库来计算HMAC-SHA256摘要。在这个例子中,我们使用了一个秘钥和一个数据字符串来计算摘要。计算出的摘要被存储在digest数组中,并通过循环输出为十六进制字符串。请注意,这个例子中的秘钥和数据都是硬编码的,实际使用时应该从安全的来源中获取。