zoukankan      html  css  js  c++  java
  • blowfish ECB decode

    blowfish  ECB  Decode

    package main
    
    import (
        "crypto/cipher"
        "encoding/hex"
        "fmt"
        "golang.org/x/crypto/blowfish"
    )
    
    var key string = "your key"
    
    func main() {
        ci, err := blowfish.NewCipher([]byte(key))
        if err != nil {
            panic(err)
        }
        s := NewECBDecrypter(ci)
        data, _ := hex.DecodeString("price")
        dst := make([]byte, len(data))
        s.CryptBlocks(dst, data)
        fmt.Println(string(dst))
    }
    
    
    type ECB struct {
        b         cipher.Block
        blockSize int
    }
    
    func NewECB(b cipher.Block) *ECB {
        return &ECB{
            b:         b,
            blockSize: b.BlockSize(),
        }
    }
    
    type ECBEncrypter ECB
    
    // NewECBEncrypter returns a BlockMode which encrypts in electronic code book
    // mode, using the given Block.
    func NewECBEncrypter(b cipher.Block) cipher.BlockMode {
        return (*ECBEncrypter)(NewECB(b))
    }
    func (x *ECBEncrypter) BlockSize() int { return x.blockSize }
    func (x *ECBEncrypter) CryptBlocks(dst, src []byte) {
        if len(src)%x.blockSize != 0 {
            panic("crypto/cipher: input not full blocks")
        }
        if len(dst) < len(src) {
            panic("crypto/cipher: output smaller than input")
        }
        for len(src) > 0 {
            x.b.Encrypt(dst, src[:x.blockSize])
            src = src[x.blockSize:]
            dst = dst[x.blockSize:]
        }
    }
    
    type ECBDecrypter ECB
    
    // NewECBDecrypter returns a BlockMode which decrypts in electronic code book
    // mode, using the given Block.
    func NewECBDecrypter(b cipher.Block) cipher.BlockMode {
        return (*ECBDecrypter)(NewECB(b))
    }
    func (x *ECBDecrypter) BlockSize() int {
        return x.blockSize
    }
    func (x *ECBDecrypter) CryptBlocks(dst, src []byte) {
        if len(src)%x.blockSize != 0 {
            panic("crypto/cipher: input not full blocks")
        }
        if len(dst) < len(src) {
            panic("crypto/cipher: output smaller than input")
        }
        for len(src) > 0 {
            x.b.Decrypt(dst, src[:x.blockSize])
            src = src[x.blockSize:]
            dst = dst[x.blockSize:]
        }
    }
  • 相关阅读:
    01-文件系统
    适配器模式,新老系统兼容
    01-Entity FrameWork如何控制数据的变化
    .Net实战之反射操作篇
    .Net实战之反射相关类之间的人体经络关系
    .Net实战之反射外卖计费
    [转]UINavigationController 返回的方法汇总
    [转]AFNetWorking使用笔记
    vue----子组件引用vux popup mask遮罩在最上层解决办法 z-index问题
    vue系列---vue项目(已安装vuex)中引入jquery
  • 原文地址:https://www.cnblogs.com/lavin/p/5920871.html
Copyright © 2011-2022 走看看