openssl 实现 aes 文件加密解密

openssl 实现 aes 文件加密解密

依赖

  1. Linux 环境(基础)
  2. 安装 openssl(加密用)
  3. 安装 python 环境(转换密钥用)

参考脚本如下:

#!/bin/sh

PY_FILE=__zone_aes_tool__.py

KEY=
IV=
IN_FILE=
OUT_FILE=

# 获取密钥k,向量v,输入文件i,输出文件o
while getopts ":k:v:i:o:" opt
do
    case $opt in
        k)
		KEY=$OPTARG
        echo "参数 k - key 的值: $OPTARG"
        ;;
        v)
		IV=$OPTARG
        echo "参数 v - iv  的值: $OPTARG"
        ;;
        i)
		IN_FILE=$OPTARG
        echo "参数 i - in  的值: $OPTARG"
        ;;
        o)
		OUT_FILE=$OPTARG
        echo "参数 o - out 的值: $OPTARG"
        ;;
        ?)
        echo "未知参数"
        exit 1;;
    esac
done

echo ""

echo "IN_FILE  = ${IN_FILE}"
echo "OUT_FILE = ${OUT_FILE}"
echo "KEY      = ${KEY}"
echo "IV       = ${IV}"


# 建立 python 文件,把字符串转换为 hex 值
echo "
import sys
import os

IN_MSG = sys.argv[1]
IN_MSG_LEN = len(IN_MSG)
# print '[ %s ] %s' % (IN_MSG_LEN, IN_MSG)

OUT_HEX_LIST = [hex(ord(x)) for x in IN_MSG]

# popen remove hex_list
CMD_LIST = os.popen('echo \"%s\" | sed \"s/0x//g\" | sed \"s/[, \']//g\" | sed \"s/\[//g\" | sed \"s/\]//g\"' % (OUT_HEX_LIST)).readlines()
# print 'CMD_LIST = %s' % (CMD_LIST)

# get first line
CMD_LINE = CMD_LIST[0]
# print 'CMD_LINE = %s' % (CMD_LINE)

# remove '\ n'
OUT_HEX = CMD_LINE[0:len(CMD_LINE)-1]

# print 'out hex : %s' % OUT_HEX

print OUT_HEX
" > ${PY_FILE}


# 字符串转为 hex
KEY_HEX=`python ${PY_FILE} ${KEY}`
IV_HEX=`python ${PY_FILE} ${IV}`

echo "KEY_HEX  = ${KEY_HEX}"
echo "IV_HEX   = ${IV_HEX}"


# 删除 python 文件
rm ${PY_FILE}


## 加密
echo "\n\topenssl enc -aes-128-cbc -K ${KEY_HEX} -iv ${IV_HEX} -in ${IN_FILE} -out ${OUT_FILE}\n\n"
`openssl enc -aes-128-cbc -K ${KEY_HEX} -iv ${IV_HEX} -in ${IN_FILE} -out ${OUT_FILE}`

执行命令如下:

./zone_aes_tool.sh -k 0123456789abcdef -v 0123456789ABCDEF \
                   -i mxnet_liveness_141_model_symbol.json \
                   -o encrypt_mxnet_liveness_141_model_symbol

其中:

-k:输入 16 个 ASCII 字符作为密钥

-v:输入 16 个 ASCII 字符作为向量(AES,CBC,PKCS5Padding 需要)

-i:输入需要加密的文件名

-o:输出加密后的生成的文件名

你可能感兴趣的:(Linux,Python,Shell)