对称与非对称加密

针对加密方式划分为 对称加密和非对称加密

对称加密:使用唯一秘钥对数据进行加解密,其主要特点为速度快、使用方便、适合对大数据量进行加解密操作;主要缺点也比较明显,需要事先约定秘钥,当双方通信时就涉及到该秘钥的交换,存在被截获风险。

Aes算法:将数据划分为区块,每个区块128位,计算过程将其固定在4*4矩阵内,矩阵中的每一个元素为1Byte,加密密钥可以为 128,192,256位,之后具体运算过程涉及 XOR 运算、查找表非线性替换函数替换字节、对行列做位移处理等,生成加密数据

golang 操作实现:

func aesDecode(private [32]byte, data *[]byte) error {

    var key []byte

    key = make([]byte, 32)

    copy(key[:], private[:32])

    block, err := aes.NewCipher(key)

    if err != nil {

        return fmt.Errorf("aesEncode Error: %v", err)

    }

    stream := cipher.NewCFBDecrypter(block, private[:block.BlockSize()])

    stream.XORKeyStream(*data, *data)

    return nil

}

func aesEncode(private [32]byte, data *[]byte) error {

    var key []byte

    key = make([]byte, 32)

    copy(key[:], private[:32])

    block, err := aes.NewCipher(key)

    if err != nil {

        return fmt.Errorf("aesEncode Error: %v", err)

    }

    stream := cipher.NewCFBEncrypter(block, private[:block.BlockSize()])

    stream.XORKeyStream(*data, *data)

    return nil

}

非对称加密: 主要特点拥有一组密钥对,公钥+私钥,私钥个人拥有,公钥可公开广播,数据使用公钥和公开算法对数据进行加密后,私钥可通过公开算法解密数据。

代表算法:RSA 、ECC

RSA 实行的是大数分解问题

ECC 椭圆曲线算法

算法的目的为增加逆向推导的难度,ECC椭圆曲线算法主要将计算域迁移到了椭圆上,涉及到的数学知识为 椭圆求和,几何定义在象限中的表现为 两点的和等于两点的连线与曲线的交点对x轴对称的镜像点

非对称秘钥算法可用于 数字签名和非对称加密

ed25519 签名算法

curv25519 可实现非对称加密,但非对称加密通常不用来做为数据加密算法,而是用来提供对称秘钥的秘钥交换安全算法,其使用方法可以为

1、明文——aes算法加密———>密文

2、秘钥使用非对称加密算法交换

aes秘钥选取 curv25519(A秘钥,B公钥)=Aes秘钥=curv25519(B秘钥,A公钥)

golang实现:

"golang.org/x/crypto/curve25519"

ScalarMult(dst, in, base *[32]byte)

猜你喜欢

转载自blog.csdn.net/ffhyy/article/details/82925976