Linux系统与python常用密码的加密&解密方法

Linux系统与python常用加密&解密方法

文章目录

  • Linux系统与python常用加密&解密方法
      • Linux系统加密解密方法
        • 一、openssl
        • 二、示例
          • 1、加密规则语法
          • 2、解密语法规则
          • 3、shell脚本
      • Python密码加密方法
        • 一、Base64加密
          • 1、加密
          • 2、解密
        • 二、哈希算法加密
        • 三、Fernet对称加密算法
          • 1、加密
          • 2、解密

Linux系统与python常用密码的加密&解密方法_第1张图片

Linux系统加密解密方法

一、openssl

openssl 是一个广泛用于加密和安全通信的开源工具包,提供了许多密码学算法和安全协议的实现。在使用 openssl 进行加密时,一些常见的规则和概念包括以下几点:

  1. 对称加密和非对称加密:
    • 对称加密: 使用相同的密钥进行加密和解密。常见的对称加密算法有 AES(Advanced Encryption Standard)。
    • 非对称加密: 使用一对相关的密钥,公钥用于加密,私钥用于解密,或者私钥用于签名,公钥用于验证签名。常见的非对称加密算法有 RSA、DSA、ECDSA。
  2. 加密算法和模式:
    • 加密算法: 定义了实际进行加密和解密的算法。常见的对称加密算法包括 AES、DES(Data Encryption Standard)、3DES(Triple DES)等。非对称加密算法包括 RSA、DSA、ECDSA。
    • 加密模式: 定义了对数据进行分块和处理的方式。常见的加密模式包括 ECB(Electronic Codebook)、CBC(Cipher Block Chaining)、GCM(Galois/Counter Mode)等。
  3. 哈希函数:
    • 在加密中,哈希函数常用于产生数据的固定长度的摘要,用于校验数据的完整性和生成数字签名。常见的哈希函数有 SHA-256、SHA-3、MD5(不安全,不推荐使用)等。
  4. 密钥长度:
    • 对称加密算法使用的密钥长度影响加密强度。通常,密钥越长,加密强度越高,但也会导致性能开销增加。AES算法支持128、192和256位的密钥长度。
    • 非对称加密算法使用的密钥长度同样影响加密强度,一般以比特位数表示。
  5. Initialization Vector(IV):
    • 在使用块加密模式(如CBC)时,IV 用于对第一个数据块进行初始化。IV 的作用是确保相同的明文在加密时生成不同的密文。

openssl 命令中,你会看到一些常用的参数,如:

  • -aes-256-cbc:指定使用 AES 算法,以 CBC 模式进行加密,密钥长度为 256 位。

  • -salt:在加密时使用盐值,增加加密的随机性,提高安全性。

  • -k key:指定使用的密钥。

二、示例
1、加密规则语法
echo $password | openssl enc -e -aes-128-cbc -v -p -k $key -a
2、解密语法规则
echo -e $encrypted_password | openssl enc -d -aes-128-cbc -v -p -k $key -a
3、shell脚本
#!/bin/bash

key='aksk2001'
# 加密函数
encrypt_password() {
    read -s -p "请输入要加密的密码: " password
    echo ""
    encrypted_password=$(echo $password | openssl enc -e -aes-128-cbc -k $key -a)
    echo "加密后的密码: $encrypted_password"
}

# 解密函数
decrypt_password() {
    read -p "请输入要解密的密码: " encrypted_password
    decrypted_password=$(echo -e $encrypted_password | openssl enc -d -aes-128-cbc -k $key -a)
    
    if [ $? -eq 0 ]; then
        echo "解密后的密码: $decrypted_password"
    else
        echo "解密失败,请检查输入的加密密码."
    fi
}

# 主菜单
while true; do
    echo "1. 加密密码"
    echo "2. 解密密码"
    echo "3. 退出"
    read -p "请选择操作 (1/2/3): " option

    case $option in
        1)
            encrypt_password
            ;;
        2)
            decrypt_password
            ;;
        3)
            echo "正在退出..."
            exit 0
            ;;
        *)
            echo "无效选项,请重新选择."
            ;;
    esac
done

Python密码加密方法

一、Base64加密

​ Base64 编码来加密和解密密码。请注意,这不是一个真正安全的加密方式,而仅仅是一个演示例子,不建议在实际应用中使用这种简单的加密方法。

1、加密
import base64

def encrypt_password_custom(password):
    # 自定义简单的加密方案,示例中使用了简单的Base64编码
    encrypted_password = base64.urlsafe_b64encode(password.encode()).decode()
    return encrypted_password

# 要加密的密码
password = "1q2w#E$R1234567498"

# 对密码进行自定义加密
encrypted_password_custom = encrypt_password_custom(password)
print("自定义加密后的密码:", encrypted_password_custom)
print("加密后的密码长度:", len(encrypted_password_custom))
2、解密
import base64

def decrypt_password_custom(encrypted_password):
    # 自定义简单的解密方案,示例中使用了Base64解码
    decoded_encrypted_password = base64.urlsafe_b64decode(encrypted_password + '=' * (4 - len(encrypted_password) % 4))
    return decoded_encrypted_password.decode()

# 要加密的密码
encrypted_password_custom = "MXEydyNFJFIxMjM0NTY3NDk4"

# 对密码进行自定义解密
decrypted_password_custom = decrypt_password_custom(encrypted_password_custom)
print("自定义解密后的密码:", decrypted_password_custom)
二、哈希算法加密

哈希算法是一种单向加密算法,它的设计目标是不可逆,也就是说,从哈希值无法还原出原始数据。因此,哈希算法不提供解密操作。

常见的哈希算法,如 SHA-256,SHA-3 等,只提供哈希计算,而没有专门的解密函数。当你使用哈希算法对密码进行哈希时,哈希值是固定长度的一串字符,不同的输入会产生不同的哈希值。

验证密码通常是将用户提供的密码重新哈希,然后与之前存储的哈希值比较。如果两者相等,说明提供的密码是正确的。但这并不是解密,而是重新计算哈希值。

import hashlib

def hash_password(password):
    hashed_password = hashlib.sha256(password.encode()).hexdigest()
    return hashed_password

# 用户注册时,将密码哈希后存储
user_password = "aksk2001"
hashed_user_password = hash_password(user_password)

# 用户登录时,验证密码
login_password = "aksk2001"

if hash_password(login_password) == hashed_user_password:
    print("密码正确")
else:
    print("密码错误")
三、Fernet对称加密算法

​ Fernet对称加密算法对密码进行加密。Fernet是一种基于对称密钥的加密算法,它使用相同的密钥进行加密和解密,Fernet 加密后的字符串长度是44个字符。

​ 安全存储密钥至关重要,而且密钥的泄漏可能导致加密的破解。因此,密钥的生成、存储和使用都需要谨慎处理。

1、加密
from cryptography.fernet import Fernet

def encrypt_password(key, password):
    cipher_suite = Fernet(key)
    encrypted_password = cipher_suite.encrypt(password.encode())
    return encrypted_password

# 生成加密密钥
key = '9nEkpGjhMpHjNSnQLPBHc6tyildtx70psP28CU9No94='
# 生成随机密钥
# key = Fernet.generate_key()

# 要加密的密码
password = "aksk2001"

# 对密码进行加密
encrypted_password = encrypt_password(key, password)
print("加密后的密码:", encrypted_password)

2、解密
from cryptography.fernet import Fernet

def decrypt_password(key, encrypted_password):
    cipher_suite = Fernet(key)
    decrypted_password = cipher_suite.decrypt(encrypted_password).decode()
    return decrypted_password

# 解密密钥
key = '9nEkpGjhMpHjNSnQLPBHc6tyildtx70psP28CU9No94='

# 解密前密码
encrypted_password2 = 'gAAAAABlaVZTYFNAV8oMbLDezp90-mbbiCmYu-AcdP5-lBCfgJFC1nMedUSa90u21ZcYlEXiXR69v1-AbwFC9eSYjBq62jQaUA=='
# 对密码进行解密
decrypted_password2 = decrypt_password(key, encrypted_password2)
print("解密后的密码:", decrypted_password2)

你可能感兴趣的:(linux,python,linux,python,运维)