1. # -*- coding=utf-8-*-
  2. from Crypto.Cipher import DES
  3. import base64
  4. """
  5. des cbc加密算法
  6. padding : PKCS5
  7. """
  8. class DESUtil:
  9. __BLOCK_SIZE_8 = BLOCK_SIZE_8 = DES.block_size
  10. __IV = "\0\0\0\0\0\0\0\0" # __IV = chr(0)*8
  11. @staticmethod
  12. def encryt(str, key):
  13. cipher = DES.new(key, DES.MODE_CBC, DESUtil.__IV)
  14. x = DESUtil.__BLOCK_SIZE_8 - (len(str) % DESUtil.__BLOCK_SIZE_8)
  15. if x != 0:
  16. str = str + chr(x)*x
  17. msg = cipher.encrypt(str)
  18. # msg = base64.urlsafe_b64encode(msg).replace('=', '')
  19. msg = base64.b64encode(msg)
  20. return msg
  21. @staticmethod
  22. def decrypt(enStr, key):
  23. cipher = DES.new(key, DES.MODE_CBC,DESUtil.__IV)
  24. # enStr += (len(enStr) % 4)*"="
  25. # decryptByts = base64.urlsafe_b64decode(enStr)
  26. decryptByts = base64.b64decode(enStr)
  27. msg = cipher.decrypt(decryptByts)
  28. paddingLen = ord(msg[len(msg)-1])
  29. return msg[0:-paddingLen]
  30. if __name__ == "__main__":
  31. key = ""
  32. res = DESUtil.encryt("", key)
  33. print res # ED5wLgc3Mnw=
  34. print DESUtil.decrypt(res, key)

python 实现 DES CBC模式加解密的更多相关文章

  1. python 实现 AES CBC模式加解密

    AES加密方式有五种:ECB, CBC, CTR, CFB, OFB 从安全性角度推荐CBC加密方法,本文介绍了CBC,ECB两种加密方法的python实现 python 在 Windows下使用AE ...

  2. c++ 基于wincrypt的DES CBC模式加解密

    des.h #pragma once #include <windows.h> #include <atlstr.h> #include <wincrypt.h> ...

  3. python 实现 AES ECB模式加解密

    AES ECB模式加解密使用cryptopp完成AES的ECB模式进行加解密. AES加密数据块分组长度必须为128比特,密钥长度可以是128比特.192比特.256比特中的任意一个.(8比特 == ...

  4. python的des和3des加解密

    1.加密: pyDes.des(key, [mode], [IV], [pad], [padmode]) pyDes.triple_des(key, [mode], [IV], [pad], [pad ...

  5. golang 3des/ecb/cbc/pkcs5 加解密

    本人新手,参考文档: http://blog.studygolang.com/2013/01/go%E5%8A%A0%E5%AF%86%E8%A7%A3%E5%AF%86%E4%B9%8Bdes/ h ...

  6. Android DES加密的CBC模式加密解密和ECB模式加密解密

    DES加密共有四种模式:电子密码本模式(ECB).加密分组链接模式(CBC).加密反馈模式(CFB)和输出反馈模式(OFB). CBC模式加密: import java.security.Key; i ...

  7. AES CBC/CTR 加解密原理

    So, lets look at how CBC works first. The following picture shows the encryption when using CBC (in ...

  8. Java 使用AES/CBC/PKCS7Padding 加解密字符串

    介于java 不支持PKCS7Padding,只支持PKCS5Padding 但是PKCS7Padding 和 PKCS5Padding 没有什么区别要实现在java端用PKCS7Padding填充, ...

  9. android中的MD5、Base64、DES/3DES/ADES加解密

    MD5摘要算法: <span style="font-size:18px;">主要代码: String s = edit.getText().toString(); i ...

随机推荐

  1. ASP.Net Core使用分布式缓存Redis从入门到实战演练

    一.课程介绍 人生苦短,我用.NET Core!缓存在很多情况下需要用到,合理利用缓存可以一方面可以提高程序的响应速度,同时可以减少对特定资源访问的压力.  所以经常要用到且不会频繁改变且被用户共享的 ...

  2. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time

    Tomcat在启动是提示: INFO [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars At least on ...

  3. Linux文件和目录管理

    一.与文档相关的命令 1,命令head:用于显示文件前10行,后面直接跟文件名.如果加-n,则显示文件的前几行. 选项-n后有无空格均可也可以省略字母n,直接跟数字 2,命令tail:和命令head类 ...

  4. JS面向对象的类 实例化与继承

    JS中 类的声明有两种形式: // 类的声明 function Animal() { this.name = 'name' } // ES6中的class声明 class Animal2 { cons ...

  5. GameZ游戏排名系统

    GameZ游戏排名系统 GameZ为他们最新推出的游戏开通了一个网站.世界各地的玩家都可以将自己的游戏得分上传到网站上.这样就可以看到自己在世界上的排名.得分越高,排名就越靠前.当两个玩家的名次相同时 ...

  6. linux免费https证书申请教程

    linux免费https证书申请教程直接去阿里云 菜单有个证书服务进去有个购买证书菜单 选择免费的 然后会提示写个人资料 然后系统生成csr 然后提交审核这个时候会有份邮件 文件下载上传到你的服务器 ...

  7. Linux内核中的IS_ERR()实现

    1.前言 对于任何一个指针来说,必然有三种情况:一种是有效指针,一种是NULL,也就是空指针,一种是错误指针,也就是无效指针,在Linux内核中,所谓的错误指针就是指其已经到达了内核空间的最后一个pa ...

  8. 创建新react项目 运行npm start 报错踩过的坑

    1.看react官网创建新的react项目 :npx create-react-app my-app    cd到my-app  npm start 遇见如下报错 这是因为电脑本地git的原因 ,不是 ...

  9. C编程遇到的一些小细节

    1  typedef int ElemType  -->  typedef int ElemType; 此处要加分行(:),要区别  #defin a 20 此处不需要加分号:#define是预 ...

  10. 【Rust】Rust的安装和配置

    -----------------------参考文档------------------------------------- https://www.rust-lang.org/tools/ins ...