宁锦鹏第一周工作
openssl ec/ecparam/errstr/ripemd160/camellia-128-ecb/camellia-192-cbc/camellia-192-ecb3条指令及1个哈希算法3个加密算法的学习
ecparam
- ecparam指令通过用椭圆曲线加密方式,生成ec密钥,可以指定参数
openssl ecparam [-inform DER|PEM] [-outform DER|PEM] [-in filename] [-out filename][-noout] [-text] [-C] [-check] [-name arg] [-list_curve] [-conv_form arg] [-param_enc arg][-no_seed] [-rand file(s)] [-genkey] [-engine id]
- -inform PEM|DER::输入文件格式,DER或者PEM格式。DER格式采用ASN1的DER标准格式。一般用的多的都是PEM格式,就是base64编码格式。
- -outform DER|PEM:输出文件格式,DER或者PEM格式。
- -in filename:输入的椭圆曲线密钥文件,默认为标准输入。
- -out filename:椭圆曲线密钥输出文件,默认为标准输出。
- -noout:不打印参数编码的版本信息。-text:打印椭圆曲线密钥参数信息值。
- -C:以C语言风格打印信息。
- -check:检查椭圆曲线密钥参数。
- -name arg:采用短名字。
- -list_curve:打印所有可用的短名字。
- -param_out:指定参数编码方法,可以是named_curve和explicit,默认为named_curve。
- -conv_form arg:指定信息存放方式,可以是compressed、uncompressed或者hybrid,默认为compressed。
- -no_seed:如果-param_enc指定编码方式为explicit,不采用随机数种子。
- -rand file(s):随机数产生种子。
- -genkey:生成椭圆曲线密钥参数。
- -engine id:指定硬件引擎。
OpenSSL目前不能够产生新的曲线算法,B
命令仅仅能够从知道的曲线中产生EC参数。
用曲线'prime192v1'产生EC参数:
openssl ecparam -out ec_param.pem -name prime192v1
用明确的参数来产生EC参数:
openssl ecparam -out ec_param.pem -name prime192v1 -param_enc explicit
验证给出的EC参数:
openssl ecparam -in ec_param.pem -check
创建EC参数和私钥文件:
openssl ecparam -out ec_key.pem -name prime192v1 -genkey
改变编码为'compressed':
openssl ecparam -in ec_in.pem -out ec_out.pem -conv_form compressed
打印EC参数到标准输出中:
openssl ecparam -in ec_param.pem -noout -text
ecparam的主要功能我认为是可以根据想使用的椭圆曲线参数来指定编码方式,生成相应的私钥文件
ec
- 椭圆曲线密钥处理工具。它可以转换不同的格式以及打印相对应的组件信息值。
- 用法:
openssl ec [-inform PEM|DER] [-outform PEM|DER] [-in filename] [-out filename] [-passin arg][-passout arg] [-text] [-noout] [-param_out] [-conv_form arg] [-pubin] [-pubout] [-param_enc arg][-engine id] [-des] [-des3] [-idea]
- -inform PEM|DER:
输入文件格式,DER或者PEM格式。DER选项是一个私钥,它用ASN。1DER编码的SEC1私钥文件。当为公钥时,用RFC3280指定的SubjectPublicKeyInfo结构。默认的是PEM格式,它也接受PKCS#8格式的私钥。 - -outform DER|PEM:
输出文件格式,DER或者PEM格式。 - -in filename:
输入的椭圆曲线密钥文件,默认为标准输入。 - -out filename:
椭圆曲线密钥输出文件,默认为标准输出。 - -passin arg:
指定私钥包含口令存放方式。 - -passout arg:
输出文件口令保护存放方式。 - -text:
打印所有信息。 - -noout:
不打印信息。 - -param_out:
指定参数编码方法,可以是named_curve和explicit,默认为named_curve。 - -conv_form arg:
指定信息存放方式,可以是compressed、uncompressed或者hybrid,默认为compressed。 - -pubin:
设置此选项后,从输入文件中读取公钥值,默认读取的是私钥值。 - -pubout:
设置此选项后,保存公钥值到输出文件中,默认的是保存私钥值到输出文件中。 - -param_enc arg:
指定椭圆曲线的编码方式。它的值为可以为B<named_curve>,EC参数被OID所指定;它的另一个值为B,EC参数被明确的给出(RFC3279中定义的EC参数结构)。默认的值是B<named_curve>。在RFC3279中指定B 和 B 众二选一。 - -engine id:
指定引擎。 -des ,-des3, -idea, -aes128, -aes192, -aes256,-camellia128, - -camellia192, -camellia256:
指定的私钥保护加密算法。会提示输入口令。如果没有指定其中的一种,则密钥用简单的文本形式写出。
例子
创建EC参数和私钥文件:
openssl ecparam -out ec_prikey.pem -name prime192v1 –genkey
2、对私钥进行口令保护:
openssl ec -in ec_prikey.pem -des -out ec_prikey.pemopenssl
ec -in ec_prikey.pem -des -passout pass:"123456" -out ec_prikey.pem
3、从私钥提取公钥
openssl ec -in ec_prikey.pem -pubout -out ec_pubkey.pem
4、查看私钥信息
openssl ec -in ec_prikey.pem -text
5、查看公钥信息
openssl ec -in ec_pubkey.pem -pubin -text
6、pem为der
openssl ec -in ec_prikey.pem -outform der -out ec_prikey.der
ec命令我感觉是ecparam命令的扩展,可以从ecparam命令中提取公钥,而且可以对私钥进行加密。
errstr
- errstr命令用于查询错误代码
- 语法
errstr [-stats] <errno>
- 选项
-stats:打印哈希表状态
errno:错误号
- 查看错误信息
错误提示:27594:error:2006D080:lib(32):func(109):reason(128):bss_file.c:107:
openssl errstr 2006D080
errstr用于查看错误码信息
ripmd160
-
RIPEMD(RACE原始完整性校验讯息摘要)是一种加密哈希函数。
-
RIPEMD160哈希值的输出值一般是16进制的字符串。而16进制字符串,每两个字符占一个字节。我们知道,一个字节=8bit.所以使用ripemd160加密函数所得到的是一个160bit的值。
-
openssl dgst -ripemd160 test.txt
对test.txt文件取hash值。
camellia-128-ecb
一种加密算法
用于enc指令之下
补充enc
enc
对称加密算法工具。它能够运用块或者流算法对数据加/解密。还能够把加密/接密,还可以把结果进行base64编码。
openssl enc -ciphername [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a/-base64] [-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-S salt] [-salt] [-nosalt] [-z] [-md] [-p] [-P] [-bufsize number] [-nopad] [-debug] [-none] [-engine id]123
- 生成一个密钥,如果加密时使用了口令,则解密也要使用口令,arg如下所示:
- -pass pass:"123" #密码是123
- -pass pass:123 #密码是123
- -pass evn:VAR #密码从环境变量VAR中去
- -pass file:p.txt #密码从文件p.txt第一行取,不包括换行符,注意DOS格式的^M及回车符。
- -pass fd:3 #密码从文件描述符3中读
- -pass stdin#标准输入123456
- -e —— 加密,二选一
- -d —— 解密,二选一
- -a/-base64 —— 加密时设置结果以base64编码,,解密时设置输入为base64
- -A ——加密时设置结果以base64编码成一行,解密时设置输入为一行base64
- -K key —— 加密秘钥,16进制
- -iv IV ——初始向量,16进制
- -S salt ——指定16进制盐值
- -salt ——带有随机盐值 二选一
- -z ——是否压缩,需要编译时选择了zlib库
- -md digstname —— 摘要算法,当没有提供密钥时候,用于从口令中生成一个密钥,默认md5-p ——打印出使用的salt、口令以及初始化向量IV。二选一
- -P ——打印出使用的salt、口令以及初始化向量IV。不做加解密,二选一
- -bufsize number ——缓冲区大小
- -nopad ——无填充
- -debug ——打印调试信息
- -none ——不执行加 解密
- -engine id ——引擎-cihername
//加密(提供密钥)
$openssl enc -aes-128-cbc -e -K 000 -iv 000 -in test.txt -out test.cipher -a -A -p
//解密
$openssl enc -aes-128-cbc -d -K 000 -iv 000 -in test.ciphet -a -A -out test.plain -p
//加密(提供口令)
$openssl enc -aes-128-cbc -e -pass pass:123456 -S a1bec3d4e5f6 -salt -md sha1 -iv 000 in test.txt -out test.cipher -a -A -p
//解密
$openssl enc -aes-128-cbc -d -pass pass:123456 -S a1bec3d4e5f6 -salt -md sha1 -iv 000 in test.cipher -out test.plain -a -A -p
camellia-192-ecb 与 camellia-192-cbc
同上