blowfish  ECB  Decode

  1. package main
  2.  
  3. import (
  4. "crypto/cipher"
  5. "encoding/hex"
  6. "fmt"
  7. "golang.org/x/crypto/blowfish"
  8. )
  9.  
  10. var key string = "your key"
  11.  
  12. func main() {
  13. ci, err := blowfish.NewCipher([]byte(key))
  14. if err != nil {
  15. panic(err)
  16. }
  17. s := NewECBDecrypter(ci)
  18. data, _ := hex.DecodeString("price")
  19. dst := make([]byte, len(data))
  20. s.CryptBlocks(dst, data)
  21. fmt.Println(string(dst))
  22. }
  23.  
  24. type ECB struct {
  25. b cipher.Block
  26. blockSize int
  27. }
  28.  
  29. func NewECB(b cipher.Block) *ECB {
  30. return &ECB{
  31. b: b,
  32. blockSize: b.BlockSize(),
  33. }
  34. }
  35.  
  36. type ECBEncrypter ECB
  37.  
  38. // NewECBEncrypter returns a BlockMode which encrypts in electronic code book
  39. // mode, using the given Block.
  40. func NewECBEncrypter(b cipher.Block) cipher.BlockMode {
  41. return (*ECBEncrypter)(NewECB(b))
  42. }
  43. func (x *ECBEncrypter) BlockSize() int { return x.blockSize }
  44. func (x *ECBEncrypter) CryptBlocks(dst, src []byte) {
  45. if len(src)%x.blockSize != {
  46. panic("crypto/cipher: input not full blocks")
  47. }
  48. if len(dst) < len(src) {
  49. panic("crypto/cipher: output smaller than input")
  50. }
  51. for len(src) > {
  52. x.b.Encrypt(dst, src[:x.blockSize])
  53. src = src[x.blockSize:]
  54. dst = dst[x.blockSize:]
  55. }
  56. }
  57.  
  58. type ECBDecrypter ECB
  59.  
  60. // NewECBDecrypter returns a BlockMode which decrypts in electronic code book
  61. // mode, using the given Block.
  62. func NewECBDecrypter(b cipher.Block) cipher.BlockMode {
  63. return (*ECBDecrypter)(NewECB(b))
  64. }
  65. func (x *ECBDecrypter) BlockSize() int {
  66. return x.blockSize
  67. }
  68. func (x *ECBDecrypter) CryptBlocks(dst, src []byte) {
  69. if len(src)%x.blockSize != {
  70. panic("crypto/cipher: input not full blocks")
  71. }
  72. if len(dst) < len(src) {
  73. panic("crypto/cipher: output smaller than input")
  74. }
  75. for len(src) > {
  76. x.b.Decrypt(dst, src[:x.blockSize])
  77. src = src[x.blockSize:]
  78. dst = dst[x.blockSize:]
  79. }
  80. }

blowfish ECB decode的更多相关文章

  1. iOS CommonCrypto 对称加密 AES ecb,cbc

    CommonCrypto 为苹果提供的系统加密接口,支持iOS 和 mac 开发: 不仅限于AES加密,提供的接口还支持其他DES,3DES,RC4,BLOWFISH等算法, 本文章主要讨论AES在i ...

  2. java-信息安全(二)-对称加密算法DES,3DES,AES,Blowfish,RC2,RC4

    概述 信息安全基本概念: DES(Data Encryption Standard,数据加密标准) 3DES(Triple DES,三重数据加密算法(TDEA,Triple Data Encrypti ...

  3. c# BlowFish 高速 对称加密

    BlowFish 高速 对称加密 string key = "this is my key"; BlowFish algo = new BlowFish(key); string ...

  4. 使用 PyCrypto 进行 AES/ECB/PKCS#5(7) 加密

    东篱 使用 PyCrypto 进行 AES/ECB/PKCS#5(7) 加密 2013/06/05 · tech PyCrypto 是流行的 Python 加密/解密库.但是其 AES 的 ECB 模 ...

  5. 对称加密算法DES,3重DES,TDEA,Blowfish,RC5,IDEA,AES。

    对称加密算法:DES,3重DES,TDEA,Blowfish,RC5,IDEA,AES. 1.对称加密算法 1.1 定义 对称加密算法是应用较早的加密算法,技术成熟.在对称加密算法中,数据发信方将明文 ...

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

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

  7. aes 128、192、256位,cbc、cfb、ecb、ofb、pcbc加密解密

    AES加解密总共有以下这些 算法/模式/填充 字节加密后数据长度 不满16字节加密后长度 AES/CBC/NoPadding 16 不支持 AES/CBC/PKCS5Padding 32 16 AES ...

  8. DES加密ECB(模式) golang

    Java默认DES算法使用DES/ECB/PKCS5Padding,而golang认为这种方式是不安全的,所以故意没有提供这种加密方式,那如果我们还是要用到怎么办?下面贴上golang版的DES EC ...

  9. python AES加密 ECB PKCS5

    class AesEbc16:  # 按块的大小, 一块一块的加密, 明文和密文长度一样 def __init__(self): self.key = b"123qweqqqwerqwer& ...

随机推荐

  1. Android之EACCES (Permission denied)与Permission denied异常探密

    话说,Accipiter君,最近又开始怒学Android了,记得刚开始还是09年学的,现在的手机还是华为出的最早的一款Android手机C8500,那时候就想好好学习Android,赚点小钱,可是~~ ...

  2. 在WebApi中 集成 Swagger

    1. Swagger(俗称:丝袜哥)是什么东西? Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同 ...

  3. 7.Java中的字符串

    1.String的特性 特性一:不可变性 String s=new String("yangyun") s=s.toUpperCase(); 这里的s,s占用的空间是不一样的(地址 ...

  4. PullToRefreshListView相关

    PullToRefresh使用详解(四)--利用回调函数实现到底加载   链接

  5. openfoam 的安装【转载】

    原文地址: http://blog.sina.com.cn/s/blog_14bf001d10102wifw.html OpenFOAM安装 OpenFOAM基于Linux系统下运行,由于对Linux ...

  6. 北京电子科技学院(BESTI)实验报告3

    北京电子科技学院(BESTI)实验报告3 课程: 信息安全系统设计基础 班级:1452.1453 姓名:(按贡献大小排名)周恩德 .郑凯杰 学号:(按贡献大小排名)20145217 .201453 指 ...

  7. C语言 右左法则

    C指针声明解读之左右法则 C语言所有复杂的指针声明,都是由各种声明嵌套构成的.如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法.不过,右左法则其实并不是C标准里面的内容,它是从C标准的声明规定 ...

  8. jQuery学习笔记--JqGrid相关操作 方法列表(上)

    1.获得当前列表行数:$("#gridid").getGridParam("reccount"); 2.获取选中行数据(json):$("#gridi ...

  9. Linux文件系统扩容步骤

    1 扩容前检查 cat /etc/fstab df -h 在扩容之前请确认VG的Free大小,以及文件和文件系统是否达到系统限制 2 系统识别硬盘 #echo "- - -" &g ...

  10. Unity3D连接sqlite数据库操作C#版

    unity3d有自己对应的sqlite.dll分别需要三个文件 1.Mono.Data.Sqlite.dll 在unity安装文件“Unity\Editor\Data\MonoBleedingEdge ...