现在项目中有一个配置文件,其中包含数据库密码
现在想通过密钥a
加密后存储到git仓库中,然后部署到服务器的时候服务器通过密钥b
+密码
解密并使用
- 有什么方法可以实现这种需求。
- 我知道的是Windows上可以通过ssh-keygen -t rsa可以给私钥设置密码。这种机制能不能实现我的需求呢,可以的话该如何操作呢(用C++或Python给出一种实现当然更好)。
现在项目中有一个配置文件,其中包含数据库密码
现在想通过密钥a
加密后存储到git仓库中,然后部署到服务器的时候服务器通过密钥b
+密码
解密并使用
晚上好🌙🌙🌙
本答案参考ChatGPT-3.5
要实现你的需求,可以使用非对称加密算法(如RSA)对配置文件中的数据库密码进行加密,并将加密后的文件存储在git仓库中。服务器在部署时,使用相应的私钥进行解密,并读取配置文件中的数据库密码进行使用。
以下是一种实现方式:
生成密钥对:
使用ssh-keygen命令生成密钥对,其中公钥将用于加密配置文件,私钥将用于解密配置文件。在命令行终端中,运行以下命令:
ssh-keygen -t rsa
C:\Users\username\.ssh\id_rsa
)。加密配置文件:
from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.primitives import serialization, hashes
def encrypt(password, public_key_path):
with open(public_key_path, "rb") as key_file:
public_key = serialization.load_pem_public_key(
key_file.read(),
backend=default_backend()
)
encrypted_data = public_key.encrypt(
password.encode(),
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
return encrypted_data
password = "your_password"
public_key_path = "path_to_public_key"
encrypted_data = encrypt(password, public_key_path)
# 将encrypted_data保存到配置文件中
from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.primitives import serialization, hashes
def decrypt(encrypted_data, private_key_path, private_key_password):
with open(private_key_path, "rb") as key_file:
private_key = serialization.load_pem_private_key(
key_file.read(),
password=private_key_password.encode(),
backend=default_backend()
)
password = private_key.decrypt(
encrypted_data,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
return password.decode()
encrypted_data = # 从配置文件读取加密数据
private_key_path = "path_to_private_key"
private_key_password = "your_private_key_password"
password = decrypt(encrypted_data, private_key_path, private_key_password)
# 使用解密后的password进行数据库连接等操作
请注意,在实际部署环境中,私钥文件和密码应该妥善保管,不应该直接存储在代码中或公开共享。
这种方法可以实现对配置文件中敏感信息的安全保存和传输,但请注意在使用非对称加密时,加密文件的大小会增加,可能会对性能产生影响。