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

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

文章目录

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

在这里插入图片描述

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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/217609.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

运维03:LAMP

黄金架构LAMP 什么是LAMP LAMP是公认的最常见,最古老的黄金web技术栈 快速部署LAMP架构 #停止nginx,并且把nginx应用卸载了 systemctl stop nginx yum remove nginx -y#关闭防火墙 iptables -F #清空防火墙规则,比如哪些请求允许进入服…

7. 系统信息与系统资源

7. 系统信息与系统资源 1. 系统信息1.1 系统标识 uname()1.2 sysinfo()1.3 gethostname()1.4 sysconf() 2. 时间、日期2.1 Linux 系统中的时间2.1.1 Linux 怎么记录时间2.1.2 jiffies 的引入 2.2 获取时间 time/gettimeofday2.2.1 time()2.2.2 gettimeofday() 2.3 时间转换函数…

Java集合(二)

1. Map 1.1 HashMap 和 Hashtable 的区别 线程是否安全: HashMap 是非线程安全的,Hashtable 是线程安全的,因为 Hashtable 内部的方法基本都经过synchronized 修饰。(如果你要保证线程安全的话就使用 ConcurrentHashMap 吧!&…

[多线程]阻塞队列和生产者消费者模型

目录 1.阻塞队列 1.1引言 1.2Java标准库中的阻塞队列 1.3自主通过Java代码实现一个阻塞队列(泛型实现) 2.生产者消费者模型 1.阻塞队列 1.1引言 阻塞队列是多线程部分一个重要的概念,它相比于一般队列,有两个特点: 1.线程是安全的 2.带有阻塞功能 1) 队列为空,出队列就会阻…

鸿蒙HarmonyOS从零实现类微信app效果——基础界面搭建

最近鸿蒙HarmonyOS开发相关的消息非常的火,传言华为系手机后续将不再支持原生Android应用,所以对于原Android应用开发对应的Harmony版本也被一系列大厂提上了日程。作为一个名义上的移动端开发工程师((⊙o⊙)…,最近写python多过A…

应急响应-挖矿病毒处理

应急响应-挖矿病毒处理 使用top​命令实时监控占用CPU资源的是哪个进程,结果可以看到是2725这个进程。 ​​ 再使用netstat -anltp命令查看网络连接状态,定位到对应的PID号后,就拿到了远程地址 ​​ 拿到远程IP,结果是VPN入口…

JVM 运行时内存(三)

Java 堆从 GC 的角度还可以细分为: 新生代(Eden 区、From Survivor 区和 To Survivor 区)和老年代。 1. 新生代 是用来存放新生的对象。一般占据堆的 1/3 空间。由于频繁创建对象,所以新生代会频繁触发MinorGC 进行垃圾回收。新生代又分为 Eden 区、ServivorFrom、…

人工智能_机器学习059_非线性核函数_poly核函数_rbf核函数_以及linear核函数效果对比---人工智能工作笔记0099

人工智能_机器学习059_非线性核函数介绍---人工智能工作笔记0099 那么我们应该如何调整这个SVC的参数,也就是我们应该使用哪种核函数,比较合适呢?这取决于我们的数据,适合使用哪个核函数,正好我们有 提供的score = accuracy_score(y_test,y_pred) 这样的评分函数,我们可以根据…

B2B公司如何寻找意向客户的联系方式?

在B2B公司的营销过程中,少不了寻找意向客户的阶段,这也是销售过程中非常重要的一步。 很多新人都是拿到客户联系方式,就直接打电话拜访,俗话说不打没有准备的仗,因此在拜访客户之前就应该做好功课,充分了解…

AI医疗交流平台【Docola】申请823万美元纳斯达克IPO上市

来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,总部位于美国的AI医疗交流平台Docola近期已向美国证券交易委员会(SEC)提交招股书,申请在纳斯达克IPO上市,股票代码为 (DOCO) ,Docola计划…

【五分钟】熟练使用numpy的histogram函数(干货!!!)

histogram函数重要参数详解 def histogram(a, bins10, rangeNone, normedNone, weightsNone, densityNone):...位置参数a: The histogram is computed over the flattened array.(源码对参数a的解释) 从源码对参数a的解释来看,参…

从0开始使用Maven

文章目录 一.Maven的介绍即相关概念1.为什么使用Maven/Maven的作用2.Maven的坐标 二.Maven的安装三.IDEA编译器配置Maven环境1.在IDEA的单个工程中配置Maven环境2.方式2:配置Maven全局参数 四.IDEA编译器创建Maven项目五.IDEA中的Maven项目结构六.IDEA编译器导入Mav…

设计模式之代理模式(1)

目录 概述定义应用场景主要角色类图 详述基本代码应用实例符合的设计原则 总结 概述 定义 代理模式是一种结构型设计模式,它允许通过一个代理对象来控制对原始对象的访问。代理对象可以在不改变原始对象的情况下,增加一些额外的功能,例如权限…

差分基准站

差分基准站,又称参考接收机,是一种固定式卫星接收机,用于提高卫星定位精度。 差分基准站的作用是提供已知位置和准确的位置信号,以纠正其他移动定位终端接收器接收到的卫星信号中的误差。 卫星定位信号会受到多种因素的影响&#…

selenium自动化测试:xpath八种定位方式!

01、前言 如果可以的话,请先关注(专栏和账号),然后点赞和收藏,最后学习和进步。你的支持是我继续写下去的最大动力,个人定当倾囊而送,不负众望。谢谢!!! 1.…

【蓝桥杯省赛真题49】Scratch小狗避障 蓝桥杯scratch图形化编程 中小学生蓝桥杯省赛真题讲解

目录 scratch小狗避障 一、题目要求 编程实现 二、案例分析 1、角色分析

JDK安装太麻烦?一篇文章搞定

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVMJava系统类库)和JAVA工具。 JDK包含的基本组件包括: javac – 编译器&#xf…

从零开始入门Zapier:与ChatGPT双剑合璧,手把手教程让你进入AI与自动化新纪元

coments 1. 1. 打开Zapier的官方界面 登录之后,会出现一个调查表,可以根据自己的情况进行选择。 第一次注册成功,会送你14天的免费体验

SAP ABAP ALV创建动态树形菜单

创建动态树形菜单——ALV 创建的合同越多,使用树形菜单能比较直观的地显示,而且展开下阶也能明确的知识相关的信息,比如合同中的出口成品有哪些。 设计要点: 第一、 Node_key一定要区分,不能重复,否则出错…

C语言--每日选择题--Day35

第一题 1. 有如下定义:(x y) % 2 (int) a / (int) b 的值是() int x 3; int y 2;float a 2.5; float b 3.5; A:0 B:2 C:1.5 D:1 答案及解析 D 本题是考查强制类型转换和操作符优先级 操作…