golang代码能不能加密


本文摘自php中文网,作者尚,侵删。

golang代码加密方法:

DES加解密

golang中的标准库crypto/des中有DES的实现,但是golang库的描述比较简单,如果不熟悉DES的加密规则,是不容易
进行相应代码编写的,与第三方进行不同语言之间的加密与解密时,也容易混淆,出现错误。

不同的平台与语言进行DES加解密对接时,需要知道对方的是采用何种加密模式以及何种填充方式:

Windows 默认是CBC模式,CryptSetKeyParam函数,openssl 函数名中直接表明

Java 中如果Cipher.getInstance()中不填写,默认是DES/ECB/PKCS5Padding

C# 中默认是CBC模式,PKCS7Padding(PKCS5Padding)

golang默认提供的是CBC模式,所以对于ECB模式,需要自己编写代码

PKCS5Padding与PKCS5Unpadding

1

2

3

4

5

6

7

8

9

10

11

func PKCS5Padding(ciphertext []byte, blockSize int) []byte {

    padding := blockSize - len(ciphertext)%blockSize

    padtext := bytes.Repeat([]byte{byte(padding)}, padding)

    return append(ciphertext, padtext...)

}

 

func PKCS5Unpadding(origData []byte) []byte {

    length := len(origData)

    unpadding := int(origData[length-1])

    return origData[:(length - unpadding)]

}

ECB加密模式

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

    block, err := des.NewCipher(key)

    if err != nil {

        ...

    }

    bs := block.BlockSize()

    src = PKCS5Padding(src, bs)

    if len(src)%bs != 0 {

        ....

    }

    out := make([]byte, len(src))

    dst := out

    for len(src) > 0 {

        block.Encrypt(dst, src[:bs])

        src = src[bs:]

        dst = dst[bs:]

    }

    ...

}

RSA加解密

阅读剩余部分

相关阅读 >>

分享一个go json 踩坑记录

golang调试工具有哪些?

golang cond基本用法

聊聊dubbo-go-proxy的loggerfilter

如何基于go搭建一个大数据平台

型模式

erlang和golang的区别

golang怎么编写一个window定时关机

golang中的空接口使用

手撸golang 架构设计原则 接口隔离原则

更多相关阅读请进入《golang》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...

    正在狠努力加载,请稍候...