我的编程空间,编程开发者的网络收藏夹
学习永远不晚

超级简单加解密工具

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

超级简单加解密工具

方案:读取文件头,提取特定长度进行加密,加密后加这一部分写入源文件,解密可逆。

#! /usr/bin/env python
#coding=utf-8
#Edit:Sandy
#时间:2019年1月27日13:57:04
#功能:文件的加密和解密

import os
from LogUtility import Log,CreateLoggerFile

def readheader(path):
    f = open(path,"rb")
    Log("读取源文件")
    for now in f:
        if len(now)>= 20:
            Log("返回文件头字符串")
            return now[0:18]
            break
        elif len(now)>= 3:
            #print("返回少量文件头字符")
            Log("返回少量文件头字符")
            return  now[0:(len(now)-2)]
            break
        else:
            Log("文件内容太少")
            return "FFFFFFFFFF"
            break

#加密
def encrypt(path,message,key1):

    f  = open(path,"rb+")
    Log("打开需要加密的文件")
    Log("使用内置密码,错位循环加密")

    kl = len(key1)
    result1= []
    if "\r\n" in message:
        ml = len(message)-2
        key = ml // kl * key1 + key1[:ml % kl]

        for i in range(len(message)-2):
            newByte = chr(ord(message[i]) ^ ord(key[i]))
            result1.append(newByte)
        result1.append("\r\n")

    else:
        ml = len(message)
        key = ml // kl * key1 + key1[:ml % kl]
        for i in range(len(message)):
            newByte = chr(ord(message[i]) ^ ord(key[i]))
            result1.append(newByte)
    result2 = "".join(result1)
    #print result2

    f.write(result2)
    Log("将密文合入文件")

    f.close()
    Log("关闭文件")

    print("文件加密完毕^_^")
    Log("文件加密完毕^_^")

def decrypt(path, message,key1):

    f = open(path, "rb+")
    Log("打开需要解密的文件")

    Log("使用内置密码,错位循环解密")

    kl = len(key1)

    result1= []

    if "\r\n" in message:
        ml = len(message)-2
        key = ml // kl * key1 + key1[:ml % kl]
        for i in range(len(message)-2):
            newByte = chr(ord(message[i]) ^ ord(key[i]))
            result1.append(newByte)
        result1.append("\r\n")
    else:
        ml = len(message)
        key = ml // kl * key1 + key1[:ml % kl]
        for i in range(len(message)):
            newByte = chr(ord(message[i]) ^ ord(key[i]))
            result1.append(newByte)

    result2 = "".join(result1)
    #print "解密后的字符串"
    #print result2
    f.write(result2)
    Log("解除密文")

    f.close()
    Log("关闭文件")

    #print("文件解密完毕^_^")
    Log("文件解密完毕^_^")

  

日志部分代码:

import logging

logger = logging.getLogger()
logger.setLevel(logging.DEBUG)


def CreateLoggerFile(filename):
    try:
        fulllogname = filename
        fh = logging.FileHandler(fulllogname)
        fh.setLevel(logging.DEBUG)
        formatter = logging.Formatter('%(asctime)s [line:%(lineno)d] %(message)s')
        fh.setFormatter(formatter)
        logger.addHandler(fh)
    except Exception as err:
        logger.debug("Error when creating log file, error message: {}".format(str(err)))


def Log(message):
    logger.debug(message)

  

因为作为工具来使用,我们做一个简单的GUI,用Tkinter实现

#! /usr/bin/env python
#coding=utf-8
#Edit:Sandy
#date:2019/1/28

import os
import Tkinter
from Tkinter import *
import tkMessageBox as messagebox
import tkFileDialog,Tkconstants
import ttk
from LogUtility import Log,CreateLoggerFile
from Lock import encrypt,decrypt,readheader

def commodata(jiamiflag):

    if jiamiflag:

        logadd = jiamilog_t.get('0.0', END).split()[0]
        Log("LOG地址获取完成")
        CreateLoggerFile(logadd)
        Log("创建日志文件")

        flag = 0
        try:
            filename0 = jiamifname_t.get('0.0',END).split("\n")[0]
            Log("从GUI上拿到完整路径+文件名")
        except Exception as e:
            Log("filename获取出错或直接点击了加密按钮,程序自动跳转到选择文件")
            Log(str(e))
            flag = 1

        if flag == 1:
            Log("调用浏览app")
            filename1 = selectfilejiami()

        else:
            filename1 = filename0

        Log("成功获取文件绝对路径+文件名")
        return filename1

    else:
        logadd = jiemilog_t.get('0.0', END).split()[0]
        Log("LOG地址获取完成")
        CreateLoggerFile(logadd)
        Log("创建日志文件")

        flag = 0
        try:
            filename0 = jiemifname_t.get('0.0', END).split("\n")[0]
            Log("从GUI上拿到完整路径+文件名")
        except Exception as e:
            Log("filename获取出错或直接点击了解密按钮,程序自动跳转到选择文件")
            Log(str(e))
            flag = 1

        if flag == 1:
            Log("调用浏览app")
            filename1 = selectfilejiemi()
        else:
            filename1 = filename0

        Log("成功获取文件绝对路径+文加名")
        #print filename1
        return filename1


def qidongjiamiapp():

    jiamiflag = 1
    Log("文件名获取中")
    jiamifilename =commodata(jiamiflag)
    if jiamifilename !=1:

        message = readheader(jiamifilename)
        #print message
        if message == "FFFFFFFFFF":
            messagebox.showwarning("警告","文件内容太少或者这不是一个正确文件")
        elif(message is None):
            messagebox.showwarning("警告", "空文件")
        else:
            Log("获取message完成")
            Log("调用加密app")
            encrypt(jiamifilename,message,"zhengjing1128")
            Log("加密完成")
            messagebox.showinfo("提示","加密成功")
    else:

        #messagebox.showwarning("提示","请选择正确的文件")
        pass

def qidongjiemiapp():
    
    jiamiflag = 0
    Log("文件名获取中")
    jiemifilename = commodata(jiamiflag)
    if jiemifilename != 1:

        message = readheader(jiemifilename)
        if message == "FFFFFFFFFF":
            messagebox.showwarning("警告","文件内容太少或者这不是一个正确文件")
        elif (message is None):
            messagebox.showwarning("警告", "空文件")
        else:
            Log("获取message完成")
            Log("调用加密app")
            decrypt(jiemifilename,message,"zhengjing1128")
            Log("解密完成")
            messagebox.showinfo("提示","解密成功")
    else:
        #messagebox.showwarning("提示","请选择正确的文件")
        pass

def selectfilejiami():

    Log("获取选择的文件完整路径和名称")
    s = tkFileDialog.askopenfilename()
    Log(s)

    if s == "":
        messagebox.showerror("Error","未选择文件")
        return 1
    else:
        jiemifname_t.delete('1.0', 'end')
        jiamifname_t.delete('1.0','end')
        jiamifname_t.insert(Tkinter.END, s)
        jiamifname_t.see(END)
        Log("已将加密文件路径输出到GUI")
        return s

def selectfilejiemi():

    Log("获取选择的文件完整路径和名称")
    s = tkFileDialog.askopenfilename()
    Log(s)

    if s == "":
        messagebox.showerror("Error","未选择文件")
        return 1
    else:

        jiamifname_t.delete('1.0', 'end')
        jiemifname_t.delete('1.0','end')
        jiemifname_t.insert(Tkinter.END, s)
        jiemifname_t.see(END)
        Log("已将解密文件路径输出到GUI")
        return s

if __name__ == "__main__":

    try:
        root = Tkinter.Tk()
        root.title("加解密工具")
        root.geometry("800x450")
        print "debug1"
        root.resizable(width=False, height=False)
        Tkinter.Label(root, text='加密区域', fg='blue', font=("黑体", 20, "bold")).grid(row=0, column=2)
        Tkinter.Label(root, text='*Version: v0.1-20190128*', fg='blue', font=("黑体", 10)).grid(row=11, column=4)
        Tkinter.Label(root, text='*Design : Sandy Zheng*', fg='blue', font=("黑体", 10)).grid(row=12, column=4)

        Tkinter.Label(root,text='日志地址:',font=("黑体", 10)).grid(row=1,column=1)
        jiamilog_t=Tkinter.Text(root,height=3,width=60)
        jiamilog_t.grid(row=1,column=2)
        jiamilog_t.insert('0.0','E:/jiami-Log.txt')

        Tkinter.Label(root, text='加密文件完整路径:',font=("黑体", 10)).grid(row=2, column=1)
        jiamifname_t = Tkinter.Text(root, height=3, width=60)
        jiamifname_t.grid(row=2, column=2)

        jiamiinputfile =Tkinter.Button(root, text='浏览',activeforeground = "red",fg='blue',font=("黑体", 12, "bold"), height =2,command= selectfilejiami)
        jiamiinputfile.grid(row = 2,column = 3)

        btn_jiami=Tkinter.Button(root,text='开始加密',activeforeground = "red",fg='black',font=("黑体", 12, "bold"),height = 2,command=qidongjiamiapp)
        btn_jiami.grid(row=5,column=3)


        Tkinter.Label(root,text =  "").grid(row=6,column=1)
        #Tkinter.Label(root, text="").grid(row=7, column=1)
        Tkinter.Label(root, text='解密区域', fg='blue', font=("黑体", 20, "bold")).grid(row=7, column=2)


        Tkinter.Label(root,text='日志地址:',font=("黑体", 10)).grid(row=8,column=1)

        jiemilog_t=Tkinter.Text(root,height=3,width=60)
        jiemilog_t.grid(row=8,column=2)
        jiemilog_t.insert('0.0','E:/jiemi-Log.txt')

        Tkinter.Label(root, text='解密文件完整路径:',font=("黑体", 10)).grid(row=9, column=1)

        jiemifname_t = Tkinter.Text(root, height=3, width=60)
        jiemifname_t.grid(row=9, column=2)

        jiemiinputfile =Tkinter.Button(root, text='浏览',activeforeground = "red",fg='blue',font=("黑体", 12, "bold"), height =2,command= selectfilejiemi)
        jiemiinputfile.grid(row = 9,column = 3)


        btn_jiemi = Tkinter.Button(root, text='开始解密', activeforeground="red", fg='black', font=("黑体", 12, "bold"),
                                  height=2, command=qidongjiemiapp)
        btn_jiemi.grid(row=10, column=3)

        root.mainloop()
    except Exception as e:
        pass

  

完成后,我们可以用py2exe模块直接生成exe可执行文件,做好后界面如下图:

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

超级简单加解密工具

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

超级简单加解密工具

方案:读取文件头,提取特定长度进行加密,加密后加这一部分写入源文件,解密可逆。#! /usr/bin/env python#coding=utf-8#Edit:Sandy#时间:2019年1月27日13:57:04#功能:文件的加密和解密i
2023-01-30

JavaClass加密工具ClassFinal详解

ClassFinal是一款javaclass文件安全加密工具,支持直接加密jar包或war包,无需修改任何项目代码,兼容spring-framework;可避免源码泄漏或字节码被反编译,这篇文章主要介绍了JavaClass加密工具ClassFinal,需要的朋友可以参考下
2023-03-20

Java:Hutool工具箱之Hutool-crypto加密解密

文档 https://hutool.cn/docs/#/crypto/概述 目录 1、摘要算法 digest2、对称加密 symmetric3、不对称加密 asymmetric 重点单词: symmetric [sɪ'me
2023-08-21

Python制作钉钉加密/解密工具

又是很久没有写技术博客了,盖因最近都在学习知识,也没有总结出什么值得分享的内容,所以一直停笔至今。最近的工作和钉钉的开发打上了交到,官方并没有提供任何Python的SDK,于是只能全部自己写。现在我将其中实现起来相对费时间的“加密/解密/签
2022-06-04

JAVA超级简单的爬虫实例讲解

爬取整个页面的数据,并进行有效的提取信息,注释都有就不废话了:public class Reptile { public static void main(String[] args) { String url1=""; //传入
2023-05-30

Java AES加密解密的简单实现方法

废话不多说,直接上代码package com.mstf.aes; import java.io.UnsupportedEncodingException;import java.security.InvalidKeyException;im
2023-05-31

不需要任何加密工具 给win7单个磁盘加密的方法

学生一族,办公一族,电脑常常就在跟前。有时候难免同事、同学借用一下电脑,但电脑里或多或少有一些隐私,虽然不情愿编程客栈,但又不好意思不借,实际上除了整个电脑加密外还可以给某个磁盘加密,这里就来讲讲方法吧!1、面上双击打开我的电脑。2、在对话
2023-06-09

C#实现简单的文件加密与解密方式

这篇文章主要介绍了C#实现简单的文件加密与解密方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-01-28

Linux下实现 OpenSSL 简单加密与解密字符串

场景shell脚本中存在明文密码客户要求禁止使用明文密码,密码做加密处理.方案在网上了解到了Linux OpenSSL加密解密工具可以指定各种加密算法为字符,文件做加密处理.加密的案例比较多,解密的寥寥无几.有兴趣的可以去查下中文教程案例中
2023-06-05

使用shc工具加密shell脚本详解

Shc可以用来对shell脚本进行加密,可以将shell脚本转换为一个可执行的二进制文件。经过shc对shell脚本进行加密后,会同时生成两种个新的文件,一个是加密后的可执行的二进制文件(文件名以.x结束),另一个是C语言的原文件(文件名以
2022-06-04

shell脚本加密工具shc使用详解

shell脚本加密工具shcshc是一个加密shell脚本的工具.它的作用是把shell脚本转换为一个可执行的二进制文件.应用场景 用shell脚本对系统进行自动化维护,简单,便捷而且可移植性好.但shell脚本是可读写的,很有可能会泄露敏
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录