base64, md5/SHA1, AES

参考:openssl , openssl 命令参数



base64: encoding

$ echo hello world | openssl base64
aGVsbG8gd29ybGQK
$ echo aGVsbG8gd29ybGQK | openssl base64 -d
hello world
$ openssl base64 -in file.txt
[...]
$ openssl base64 -d -in file.base64
[...]

[TOP]


md5/SHA1: digest

$ echo -n "hello world" | md5sum
5eb63bbbe01eeed093cb22bb8f5acdc3  -
$ echo -n "hello world" | openssl md5
(stdin)= 5eb63bbbe01eeed093cb22bb8f5acdc3
$ openssl md5 file.txt
MD5(file.txt)= xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
$ echo -n "hello world" | openssl sha1
(stdin)= 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed
$ openssl sha1 file.txt
SHA1(file.txt)= xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

注意:echoecho -n是不同的。

[TOP]


AES/RSA: cipher

AES

$ echo hello world | openssl aes-128-cbc -k 123 -base64
U2FsdGVkX18OHihiZ6nWX1QOA43V64h3Shu5QIHkQVM=

这是对字符串“hello world”进行aes加密,密钥为123,输出结果以base64编码输出。-k现多写为-key

$ echo U2FsdGVkX18OHihiZ6nWX1QOA43V64h3Shu5QIHkQVM= | openssl aes-128-cbc -d -k 123 -base64
hello world

这是对上述结果解密。

对于文件的加密或解密,使用-in即可,加密或解密后输出文件名可用-out指定。

RSA

$ openssl genrsa -out key.pem 1024

生成RSA密钥,指定长度为1024。

$ openssl rsa -in key.pem -pubout -out pubkey.pem

提取PEM格式公钥。

$ openssl rsa -in key.pem -RSAPublicKey_out -out pubkey.pem

提取PEM RSAPublicKey格式公钥。

$ openssl rsautl -encrypt -in input.file -inkey pubkey.pem -pubin -out output.file

使用公钥加密文件,-inkey指定加密公钥文件。

$ openssl rsautl -decrypt -in input.file -inkey key.pem -out output.file

使用私钥解密文件,-inkey指定解密私钥文件。

更多编码、摘要、加密方法可使用openssl help或到这里查看。

[TOP]


ssh-keygen

使用rsa密钥可以使ssh登陆时免于输入密码。

$ ssh-keygen  #等价于ssh-keygen -t rsa,-t用于指定密钥类型,默认为rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/USER/.ssh/id_rsa): /home/USER/.ssh/id_rsa  #这里是为密钥命名
Enter passphrase (empty for no passphrase):   #输入口令,可设为空
Enter same passphrase again:
Your identification has been saved in /home/USER/.ssh/id_rsa.  #私钥文件,相当于钥匙
Your public key has been saved in /home/USER/.ssh/id_rsa.pub.  #公钥文件,相当于锁
The key fingerprint is:
26:09:2e:cd:5a:fd:fc:61:65:83:8a:c7:04:8f:b1:25 USER@LOCALHOST
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|    . E .        |
|   + o X   .     |
|  . = * S . +    |
|   +   O . o .   |
|  .   . * o      |
|       . o .     |
|          .      |
+-----------------+
$ ssh-copy-id [-i id_rsa] USER@REMOTEHOST  #将公钥(-i指定公钥)传到远程主机上,添加到~/.ssh/authorized_keys文件中

id_rsaid_rsa.pub相当于锁和钥匙,id_rsa由本机生成,而且只保存在本机,id_rsa.pub由本机生成,但可以通过ssh-copy-id或其他方式分发给多个远程主机,这样通过本机ssh登陆这些远程主机时就不需要输入密码了。

不同的应用、账号、远程主机往往需要不同的rsa密钥,多个密钥可以通过.ssh/config管理,其格式为:

Host gitlab.com #命名
    Hostname gitlab.com #远程主机
    User git #用户名
    Port 22 #端口
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/gitlab_rsa #指定私钥
Host github.com
    Hostname github.com
    User git
    Port 443
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/github_rsa

[TOP]