sublime text下加密文本文档

这篇博客介绍了如何在Sublime Text下实现文本文档的加密,通过编写一个简单的插件,利用python调用openssl命令来实现加密解密功能。插件的主要流程包括:插件调用openssl、加密文档后自动解密并对比原文,如果一致则删除源文档,以及解密后自动打开文档内容。用户可以将实现的代码放在User目录下,并绑定快捷键以便快速加密文档。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sublime text下加密文本文档

在编写笔记等,有些文档需要加密保存,实现一个简单的加密解密功能插件。

功能大致流程为sublime插件调用openssl。

python调用外部命令的函数如下:

class BaseCommand(object):
    def run_command(self, cmd):
        cwd = os.path.dirname(self.view.file_name())
        print("cmd %r" % cmd)
        proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=cwd, env=os.environ)

        try:
            outs, errs = proc.communicate(timeout=15)
            print("outs %r %r" % (outs, proc))
        except Exception:
            proc.kill()
            outs, errs = proc.communicate()
        print("outs %r, errs %r" % (b'\n'.join(outs.split(b'\r\n')), errs))
        if errs is None or len(errs) == 0:
            return outs.decode()
        return errs

openssl命令的组装函数如下:

class BaseCommand(object):
    def get_enccmd(self, filename):
        cmd_tmpl = 'openssl enc -e -aes-256-cbc -base64 -k "%s" -in "%s" -out "%s.enc"'

        if filename is None or len(filename) == 0:
            return 
        _, key = os.path.split(filename)

        cmd = cmd_tmpl % (key, filename, filename)
        return cmd

    def get_deccmd(self, filename):
        cmd_tmpl = 'openssl enc -d -aes-256-cbc -base64 -k "%s" -in "%s.enc" -out "%s.out"'

        if filename is None or len(filename) == 0:
            return 

        if len(filename) > 4 and filename.endswith('.enc'):
            filename = filename[:-4]

        _, key = os.path.split(filename)

        cmd = cmd_tmpl % (key, filename, filename)
        return cmd

主要功能点

  • 加密文档后,先自动解密,把解密后的文档和原文档对比,如果对比一致,自动删除源文档。
  • 解密文档后,自动打开文档内容。
    实现代码如下:

class EncCommand(BaseCommand, sublime_plugin.WindowCommand):
    def run(self):
        '''
        加密当前view的文件,并且解密文件,和源文件对比;如果对比一致,删除当前文件,保留加密后的文件
        '''
        v = self.window.active_view()
        self.view = v
        fn = v.file_name()
        if fn.endswith(".enc"):
            return
        cmd = self.get_enccmd(fn)
        cmd_dec = self.get_deccmd(fn)
        print("enc cmd: %s" % cmd)
        ret = self.run_command(cmd)
        if ret is None or len(ret) == 0:
            ret2 = self.run_command(cmd_dec)
            if ret2 is None or len(ret2) == 0:
                if filecmp.cmp(fn, "%s.out" % fn):
                    print("enc success")
                    os.remove(fn)
                    os.remove("%s.out" % fn)
                    return 
        sublime.error_message("%s %s" % (ret, ret2))


class DecCommand(BaseCommand, sublime_plugin.WindowCommand):
    def run(self):
        '''
            解密文件,解密后重命名filename.out为filename
        '''
        v = self.window.active_view()
        self.view = v
        fn = v.file_name()
        cmd = self.get_deccmd(fn)
        print("dec cmd: %s" % cmd)
        ret = self.run_command(cmd)
        print("ret %r" % ret)
        if ret is None or len(ret) == 0:
            if len(fn) > 4 and fn.endswith(".enc"):
                fn2 = fn[:-4]
                os.rename("%s.out"%fn2, fn2)
                self.window.open_file(fn2)
            return

        sublime.error_message("%s" % ret)

实现后放到User目录下,绑定按键,就可以快捷的加密自己的文档了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值