1. 程式人生 > >對稱與非對稱加密

對稱與非對稱加密

針對加密方式劃分為 對稱加密和非對稱加密

對稱加密:使用唯一祕鑰對資料進行加解密,其主要特點為速度快、使用方便、適合對大資料量進行加解密操作;主要缺點也比較明顯,需要事先約定祕鑰,當雙方通訊時就涉及到該祕鑰的交換,存在被截獲風險。

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)