在Linux下,使用OpenSSL实现数据完整性校验通常涉及以下几个步骤:
-
生成密钥对(如果还没有):
- 使用RSA或EC密钥对算法生成公钥和私钥。
openssl genpkey -algorithm RSA -out rsa_key.pem 2048 openssl genpkey -algorithm EC -out ec_key.pem -pkeyopt ec_paramgen_curve:secp256k1
-
提取公钥(如果需要):
- 从私钥文件中提取公钥。
openssl rsa -in rsa_key.pem -pubout -out rsa_pubkey.pem openssl ec -in ec_key.pem -pubout -out ec_pubkey.pem
-
生成消息摘要:
- 使用SHA-256等哈希算法生成数据的摘要。
openssl dgst -sha256 data.txt > data_digest.txt
-
使用私钥加密摘要(生成数字签名):
- 使用私钥对摘要进行加密,生成数字签名。
openssl pkeyutl -sign -in data_digest.txt -out signature.bin -inkey rsa_key.pem # 或者对于EC密钥 openssl pkeyutl -sign -in data_digest.txt -out signature.bin -inkey ec_key.pem -pkeyopt ec_param_enc:uncompressed
-
验证数字签名:
- 使用公钥验证数字签名,确保数据未被篡改。
openssl pkeyutl -verify -in data_digest.txt -sigfile signature.bin -inkey rsa_pubkey.pem # 或者对于EC密钥 openssl pkeyutl -verify -in data_digest.txt -sigfile signature.bin -inkey ec_pubkey.pem -pkeyopt ec_param_enc:uncompressed
-
比较摘要:
- 如果验证成功,说明数据未被篡改。你可以手动比较原始摘要和验证后的摘要,或者使用OpenSSL自动比较。
diff data_digest.txt <(openssl pkeyutl -verify -in data_digest.txt -sigfile signature.bin -inkey rsa_pubkey.pem -outform DER | openssl base64 -A)
通过这些步骤,你可以确保数据的完整性和真实性。请注意,实际应用中可能需要根据具体需求调整参数和算法。