第一步:生成RSA-2048bit私钥
openssl genrsa -out prikey.pem 2048
第二步:用生成的私钥生成公钥
openssl rsa -in prikey.pem -pubout -out pubkey.pem
第三步:计算目标文件的SHA256,例如目标文件名 update.bin
1. 用文件流打开文件
FILE *fp = fopen("update.bin","r"); /** only read */
2.获取文件长度
fseek(fp,0,SEEK_END);
int length = ftell(fp);
fseek(fp,0,SEEK_SET);
3.映射文件
(void *)pmap = mmap(NULL,length,PROT_READ,MAP_SHARED,fileno(fp),0);
4.计算SHA256
unsigned char hash[32];
SHA256(pmap,length,hash);
第四步:使用私钥加密hash
FILE *file = fopen("prikey.pem","r");
RSA *prsa = PEM_read_RSA_PUBKEY(file,NULL,NULL,NULL);
int rsa_len = RSA_size(prsa);
unsigned char * encrypt_data = (unsigned char *)malloc(rsa_len);
RSA_public_encrypt(rsa_len,hash,encrypt_data,prsa,RSA_NO_PADDING);
/** 处理encrypt_data */
RSA_free(prsa);
free(encrypt_data );
fclose(fp);
今天就写到这,签名用私钥加密,验证用公钥解密。