1

使用 openssl 加密/解密数据和 AES 密码时,我的命令将如下所示:

openssl enc -aes-256-cbc -in message_file -K 42AB7FCE7BFEEE03E16719044916CBD475F6D000F230D213FF0F4775EF8D46F5 -iv D5C21AC249B26A1FBA376E8CFCDC4E1A -S 2C6A1B8EAACA302D -e -out message_file.enc

这会将密钥、iv 和 salt 放在我的进程标题中,在 top/ps 中可见。有没有办法在不泄露这些信息的情况下使用 openssl (或者甚至是另一种替代方法)对文件进行 AES 加密?我没有看到从文件中获取这些字符串的选项。

4

2 回答 2

1

openssl 可以从标准输入获取命令

例如 ifonetime_keyfile指定 key 和 IV 的内容如下

-K 42AB7FCE7BFEEE03E16719044916CBD475F6D000F230D213FF0F4775EF8D46F5 -iv D5C21AC249B26A1FBA376E8CFCDC4E1A

然后以下命令将使用该信息加密文件

umask 077
echo -n "enc -aes-256-cbc -in message_file -out message_file.enc " > encrypt_command_file
cat onetime_keyfile >> encrypt_command_file
openssl < encrypt_command_file

请注意,在您的问题中,您指定了键、初始化向量和盐。在这种情况下,盐参数被忽略;salt 仅用于从密码短语派生 key 和 iv。如果您明确指定 key 和 iv,那么您应该使用自己的 salt 算法为您加密的每个文件生成唯一的密钥和 iv。所以在实际使用中,上例中的文件onetime_keyfile应该是从另一个程序中生成的输出。

请参阅https://www.openssl.org/docs/crypto/EVP_BytesToKey.html,了解从密码短语和盐生成密钥和 IV 的标准算法的详细信息。

如果您不自己进行加盐,则最好使用 -kfile 或 -pass 选项从文件中读取密码短语。

于 2014-09-01T01:01:00.673 回答
1

RSA加密:

http://bsdsupport.org/q-how-do-i-use-openssl-to-encrypt-files/

openssl rsautl -encrypt -pubin -inkey public.key -in plaintext.txt -out encrypted.txt

AES加密:

基于 openssl enc -h 的结果

openssl enc -aes-128-cbc -in foo -out foo.enc -kfile passwordfile

这是 openssl enc -h 的结果。注意-kfile的描述

root@bt:/tmp# openssl enc -h
unknown option '-h'
options are
-in <file>     input file
-out <file>    output file
-pass <arg>    pass phrase source
-e             encrypt
-d             decrypt
-a/-base64     base64 encode/decode, depending on encryption flag
-k             passphrase is the next argument
-kfile         passphrase is the first line of the file argument
-md            the next argument is the md to use to create a key
                 from a passphrase.  One of md2, md5, sha or sha1
-K/-iv         key/iv in hex is the next argument
-[pP]          print the iv/key (then exit if -P)
-bufsize <n>   buffer size
-engine e      use engine e, possibly a hardware device.
Cipher Types
-aes-128-cbc               -aes-128-cfb               -aes-128-cfb1             
-aes-128-cfb8              -aes-128-ecb               -aes-128-ofb              
-aes-192-cbc               -aes-192-cfb               -aes-192-cfb1             
-aes-192-cfb8              -aes-192-ecb               -aes-192-ofb              
-aes-256-cbc               -aes-256-cfb               -aes-256-cfb1             
-aes-256-cfb8              -aes-256-ecb               -aes-256-ofb              
-aes128                    -aes192                    -aes256                   
-bf                        -bf-cbc                    -bf-cfb                   
-bf-ecb                    -bf-ofb                    -blowfish                 
-cast                      -cast-cbc                  -cast5-cbc                
-cast5-cfb                 -cast5-ecb                 -cast5-ofb                
-des                       -des-cbc                   -des-cfb                  
-des-cfb1                  -des-cfb8                  -des-ecb                  
-des-ede                   -des-ede-cbc               -des-ede-cfb              
-des-ede-ofb               -des-ede3                  -des-ede3-cbc             
-des-ede3-cfb              -des-ede3-ofb              -des-ofb                  
-des3                      -desx                      -desx-cbc                 
-rc2                       -rc2-40-cbc                -rc2-64-cbc               
-rc2-cbc                   -rc2-cfb                   -rc2-ecb                  
-rc2-ofb                   -rc4                       -rc4-40           
于 2013-04-16T04:20:51.397 回答