openssl消息摘要 签名和验签 对称加解密使用介绍
- 2018-01-18 21:26:00
- admin
- 原创 2612
一、openssl消息摘要
openssl dgst -md5 infile,结果长度32字符
ba3970dc8bd96cf58f075281dc8687da
openssl dgst -sha1 infile,结果长度40字符
9ebcc6e382fc42f0b3aeb2c7e3dce627fff4caa3
openssl dgst -sha256 infile,结果长度64字符
9181a18fa2170b63b745fe129be5c7a6cd6d34d0c8c435f96853b8b266bc577f
二、openssl签名和验签
-hex,签名结果使用16进制表示。
rsa签名和验签:
openssl dgst -sha256 -sign sign/private.pem -out sign.data infile
openssl dgst -sha256 -verify sign/public.pem -signature sign.data infile
Verified OK
hmac签名,hmac密钥长度最好和哈希算法保持一致,避免额外运算:
openssl dgst -md5 -hmac 10b9b40da9c798d2b4a6e36aa907f498 -out sign.data infile
三、对称加解密使用介绍
1、DES密钥每个字节使用奇校验,1key有效位=64*7/8=56,2key有效位=128*7/8=112,3key有效位=192*7/8=168;
2、DES密钥包含奇偶校验位,所以相同长度密钥AES比DES加密强度更高;
3、DES加密分组是64位,AES加密分组是128位,所以AES加密速度更快;
4、对称加密算法速度比较:Blowfish > AES > DES;
5、PKCS7Padding:数据缺少n字节对齐则补充n字节,每个字节是n,数据已经对齐则补充一个块,每个字节是块大小;
6、PKCS5Padding:PKCS7Padding子集,块大小固定是8字节;
7、DES默认填充方式是PKCS5Padding,AES默认填充方式是PKCS7Padding;
8、PKCS5_PBKDF2_HMAC函数使用密码生成导出密钥,规范地址:https://www.rfc-editor.org/rfc/rfc2898
奇偶校验位:
1、奇偶校验位用于表示给定位数的二进制中1的个数是奇数还是偶数,是最简单的错误校验码;
2、如果一组数据位中1的个数是奇数,那么偶校验位就置为1,从而使得1的总数是偶数;
3、如果一组数据位中1的个数是偶数,那么奇校验位就置为1,从而使得1的总数是奇数;
流加密介绍:
1、加密和解密使用相同伪随机加密数据流作为密钥,明文数据与密钥数据顺序对应加密,得到密文数据流;
2、移动通信使用的三种流加密算法:SNOW 3G、AES-CTR、ZUC;
3、AES-CTR使用密钥加密nonce和counter,生成加密数据流,nonce是12字节,counter是4字节;
4、AES-CTR明文和密文长度一样,泄露了明文长度,如果重复使用counter,可能泄露明文数据;
5、AES-GCM,AES Galois/Counter Mode,G是GMAC,消息认证码,C是CTR,计数模式;
6、AES-GCM相比AES-CBC优势:支持并行加密,支持消息认证码,并且不需要补齐;
密钥生成:
openssl rand -rand /dev/urandom 32 2>/dev/null | hexdump -e '16/1 "%02x" "\n"'
openssl rand -rand /dev/urandom 32 2>/dev/null | hexdump -e '16/1 "%02x" " | "' -e '16/1 "%_p" "\n"'
DES加解密:
openssl enc -des-ede-cbc -K 12345678 -iv 12345678 -e -in in.txt -out cipher.txt
openssl enc -des-ede-cbc -K 12345678 -iv 12345678 -d -in cipher.txt -out plain.txt
AES加解密:
openssl enc -aes-128-cbc -K 12345678 -iv 12345678 -e -in in.txt -out cipher.txt
openssl enc -aes-128-cbc -K 12345678 -iv 12345678 -d -in cipher.txt -out plain.txt