根据chef中的docs,它使用共享密钥加密数据包项目。
使用以下命令创建共享密钥:
openssl rand -base64 512 | tr -d '\r\n' > encrypted_data_bag_secret
数据以下面的格式保存。
id: mysql
pass:
cipher: aes-256-cbc
encrypted_data: JZtwXpuq4Hf5ICcepJ1PGQohIyqjNX6JBc2DGpnL2WApzjAUG9SkSdv75TfKSjX4
iv: VYY2qx9b4r3j0qZ7+RkKHg==
version: 1
user:
cipher: aes-256-cbc
encrypted_data: 10BVoNb/plkvkrzVdybPgFFII5GThZ3Op9LNkwVeKpA=
iv: uIqKHZ9skJlN2gpJoml6rQ==
version: 1
我试图使用openssl解密其中一个项目,但未能获得正确的魔法组合。
使用上面的示例数据,下面是我想出的最好的命令,我觉得应该可行。数据是base64解码的,并且来自openssl的人iv
和key
应该是十六进制的,但我认为我的转换正在向openssl提供正确的数据。
cat 'JZtwXpuq4Hf5ICcepJ1PGQohIyqjNX6JBc2DGpnL2WApzjAUG9SkSdv75TfKSjX4' > encrypted_data
cat 'VYY2qx9b4r3j0qZ7+RkKHg==' > iv
openssl enc -d -aes-256-cbc -a \
-in encrypted_data \
-K $(cat encrypted_data_bag_secret|base64 -d|xxd -p) \
-iv $(cat iv|base64 -d|xxd -p)
任何人都可以看到我做错了什么或者是否有使用openssl和共享密钥文件手动解密厨师数据包项目的示例?
答案 0 :(得分:0)
通过SHA256运行密钥数据,并确保使用原始摘要,而不是十六进制或base64。你也不想先对它进行base64解码,我们在base64模式下生成密钥只是因为它只使用可打印字符,而不是因为它曾被用作base64数据。
您可以在the encryptor class中看到相关代码。
另请注意,这仅适用于版本1包装物品。我们还有版本2,它添加了你必须剥离的MAC,以及使用aes-256-gcm的版本3。
答案 1 :(得分:0)
扩展@coderanger:
鉴于加密数据包的内容,您需要对iv
和encrypted_data
进行64位解码,然后获取原始键值并在其上运行SHA256。以下是使用上面pass
数据包项目的示例Python脚本:
import hashlib
from base64 import b64decode
from Crypto.Cipher import AES
iv = b64decode('VYY2qx9b4r3j0qZ7+RkKHg==')
key = 'data_bag_key_used_to_encrypt_data_bag'
key = hashlib.sha256(key.encode()).digest()
encoded = b64decode('JZtwXpuq4Hf5ICcepJ1PGQohIyqjNX6JBc2DGpnL2WApzjAUG9SkSdv75TfKSjX4')
dec = AES.new(key=key, mode=AES.MODE_CBC, IV=iv)
value = dec.decrypt(encoded)
value
现在应该包含您解密的data_bag内容