DEV Community

Cover image for Implementasi Metode Standard Symmetric Encryption Signature pada Golang
Yoga Meleniawan Pamungkas
Yoga Meleniawan Pamungkas

Posted on • Edited on

Implementasi Metode Standard Symmetric Encryption Signature pada Golang

#go

Image description

Apa Itu Metode Standard Symmetric Encryption Signature?

Jadi, gini, metode ini adalah cara untuk mengenkripsi data biar aman dan nggak bisa dibaca sama orang yang nggak punya kunci dekripsinya. Bayangin aja temen-temen punya diary yang temen-temen kunci pake gembok. Hanya orang yang punya kuncinya yang bisa buka dan baca diary temen-temen.

Symmetric Encryption

Symmetric encryption ini kayak temen-temen dan temennya temen-temen eh ini apa si wkwkwk intinya gitu, punya satu kunci yang sama buat buka gembok. Kunci ini dipake buat enkripsi (mengunci) dan dekripsi (membuka) data. Jadi, baik temen-temen maupun temennya temen-temen bisa mengunci dan membuka data yang sama asalkan kalian punya kuncinya.

Signature

Signature di sini bukan tanda tangan fisik, tapi lebih ke tanda tangan digital. Tanda tangan ini memastikan bahwa data yang dikirim beneran dari temen-temen dan nggak ada yang mengubah data di tengah jalan. Jadi, temen-temen bisa yakin data yang temen-temen terima asli dari sumbernya dan nggak diutak-atik.

Kenapa Harus Pakai Metode Ini?

  • Keamanan Data: Pastinya temen-temen mau datanya aman dari tangan-tangan jahil, kan? Dengan symmetric encryption, data temen-temen terenkripsi dan cuma bisa dibuka sama orang yang punya kuncinya.
  • Integritas Data: Dengan signature, temen-temen bisa pastikan data yang temen-temen terima atau kirim itu asli dan nggak diubah-ubah. Jadi, temen-temen nggak perlu khawatir ada yang curang.
  • Efisiensi: Symmetric encryption biasanya lebih cepat dibanding Asymmetric Encryption karena proses enkripsi dan dekripsinya lebih sederhana.

Contoh Penggunaan di Golang

Sekarang kita liat gimana cara pake metode ini di Golang.

Symmetric Encryption di Golang

package main

import (
    "crypto/aes"
    "crypto/cipher"
    "crypto/rand"
    "encoding/hex"
    "fmt"
    "io"
)

func encrypt(key, text []byte) (string, error) {
    block, err := aes.NewCipher(key)
    if err != nil {
        return "", err
    }

    ciphertext := make([]byte, aes.BlockSize+len(text))
    iv := ciphertext[:aes.BlockSize]
    if _, err := io.ReadFull(rand.Reader, iv); err != nil {
        return "", err
    }

    stream := cipher.NewCFBEncrypter(block, iv)
    stream.XORKeyStream(ciphertext[aes.BlockSize:], text)

    return fmt.Sprintf("%x", ciphertext), nil
}

func decrypt(key []byte, cryptoText string) (string, error) {
    ciphertext, _ := hex.DecodeString(cryptoText)

    block, err := aes.NewCipher(key)
    if err != nil {
        return "", err
    }

    if len(ciphertext) < aes.BlockSize {
        return "", fmt.Errorf("ciphertext too short")
    }
    iv := ciphertext[:aes.BlockSize]
    ciphertext = ciphertext[aes.BlockSize:]

    stream := cipher.NewCFBDecrypter(block, iv)
    stream.XORKeyStream(ciphertext, ciphertext)

    return string(ciphertext), nil
}

func main() {
    key := []byte("the-key-has-to-be-32-bytes-long!")
    plaintext := "hello, world!"

    ciphertext, err := encrypt(key, []byte(plaintext))
    if err != nil {
        fmt.Println("Error encrypting:", err)
        return
    }
    fmt.Printf("Encrypted: %s\n", ciphertext)

    decryptedText, err := decrypt(key, ciphertext)
    if err != nil {
        fmt.Println("Error decrypting:", err)
        return
    }
    fmt.Printf("Decrypted: %s\n", decryptedText)
}

Enter fullscreen mode Exit fullscreen mode

Signature Golang

package main

import (
    "crypto/hmac"
    "crypto/sha256"
    "encoding/hex"
    "fmt"
)

func createHMAC(key, message []byte) string {
    mac := hmac.New(sha256.New, key)
    mac.Write(message)
    return hex.EncodeToString(mac.Sum(nil))
}

func verifyHMAC(key, message []byte, signature string) bool {
    expectedMAC := createHMAC(key, message)
    return hmac.Equal([]byte(expectedMAC), []byte(signature))
}

func main() {
    key := []byte("my-secret-key")
    message := []byte("important message")

    signature := createHMAC(key, message)
    fmt.Printf("Signature: %s\n", signature)

    isValid := verifyHMAC(key, message, signature)
    fmt.Printf("Is valid: %t\n", isValid)
}

Enter fullscreen mode Exit fullscreen mode

Jadi Metode Standard Symmetric Encryption Signature ini penting buat ngejaga keamanan dan integritas data temen-temen. Dengan symmetric encryption, temen-temen bisa enkripsi data biar aman, dan dengan signature, temen-temen bisa pastiin data yang temen-temen terima atau kirim itu asli dan nggak diubah-ubah. Jadi, pastikan temen-temen pake metode ini buat segala macam keperluan yang butuh keamanan tinggi.

Sumber:

Top comments (0)