Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
January 14, 2023 10:38 am GMT

GOlang ile ifreleme ilemleri iin crypto paketi

GOlang zerinde kriptografik ilemleri yapabilmek iin kendi ierisinde eitli fonksiyonlar ieren ak kaynak kodlu "crypto" paketi bulunmaktadr.

lgili paket zellikle eitli hash, anahtar ve imzalama ilemlerini barndrarak bunlara uygun "type" deerlerini ve "fonksiyonlar" barndrmaktadr.

Paket hakknda en gzel bilgi ve temel rnekler kendi belgelendirme sayfasnda olmasna ramen baz kavramlar zetlemek istiyorum.

Hash tanmlar

Kendi ierisinde varsaylan olarak MD5 ve SHA1..512 uyarlamalarn barndrmaktadr. Dolaysyla herhangi bir noktada bunlara ihtiyacnz olduunda olduka kolay kullanabilirsiniz.

Paket bileenleri

Paket ierisinde bir ok uyarlama bulunmaktadr. Bunlarn listesi aadaki gibi olmakla birlikte bu uyarlamalarn altnda bir ok hazr fonksiyon da bulunmaktadr.

  • aes
  • cipher
  • des
  • dsa
  • ecdsa
  • ed25519
  • elliptic
  • hmac
  • md5
  • rand
  • rc4
  • rsa
  • sha1
  • sha256
  • sha512
  • subtle
  • tls
  • x509 - pkix

Bu hazr uyarlamalar ile GOlang ile eitli kriptografik ilemleri yapabilirsiniz.

Bu ktphaneyi kullanrken zellikle encoding paketini de kullanmak zellikle hex, string ve byte dnmleri olduka nemli olmaktadr.

Basit bir hash rnei

Bir verinin hash olarak saklanmas iin kullanlabilecek aadaki rnek ile GOlang zerinde basite hash kullanm salanabilmektedir. Bu rnekte saklanacak bir verinin MD5 dnm ile evrimi gsterilmektedir.

package mainimport (    "crypto/md5"    "encoding/hex"    "fmt")func getMD5Hash(message string) string {    hash := md5.Sum([]byte(message))    return hex.EncodeToString(hash[:])}func main() {    password := "saklanacakveri"    fmt.Println("MD5 hashli deeri: ", getMD5Hash(password))}

Genel kullanm alan tek ynl ekilde parolalarn bir yerlerde saklanabilmesini salamak diye dnebiliriz. Ve en nemli noktas geri dnmnn olmamas. Bunun yannda deneme-yanlma ataklaryla "tuzlama" olarak ifade edilen ekilde, ek bir veri kullanmadan direkt hash kullanm ile saldr yaplabilmektedir.

Basit bir AES ifreleme rnei

Bu ktphaneyi kullanarak bir mesaj basit bir ekilde ifrelemek iin aadaki gibi fonksiyonlar tanmlayabilirsiniz. Hash rneinden farkl olarak anahtar yardm ile geri dnm yaplabilmektedir.

package mainimport (    "crypto/aes"    "encoding/hex"    "fmt")func encryptMessage(key string, message string) string {    c, err := aes.NewCipher([]byte(key))    if err != nil {        fmt.Println(err)    }    msgByte := make([]byte, len(message))    c.Encrypt(msgByte, []byte(message))    return hex.EncodeToString(msgByte)}func main() {    plainText := "Ornek Mesaj"                      key := "this_must_be_of_32_byte_length!!"    sifrelimesaj := encryptMessage(key, plainText)    fmt.Println("ifrlenmi Mesaj: ", sifrelimesaj)}

Yukardaki gibi bir fonksiyon ile, belirli bir anahtar kullanlarak bir mesajn ifrelenmesini grebilirsiniz.

Ayn ifrenin, yine ayn anahtar deeri ile almas iin ise aadaki fonksiyonun da tanmlanmas gerekmektedir.

func decryptMessage(key string, message string) string {    txt, _ := hex.DecodeString(message)    c, err := aes.NewCipher([]byte(key))    if err != nil {        fmt.Println(err)    }    msgByte := make([]byte, len(txt))    c.Decrypt(msgByte, []byte(txt))    msg := string(msgByte[:])    return msg}

Ve yukardaki ifreli mesajn, main fonksiyonunda tekrardan decrypt edilmesi salanmaldr.

cozulmusmesaj := decryptMessage(key, sifrelimesaj)fmt.Println("zlm Mesaj: ", cozulmusmesaj)

Bu ekilde crypto paketi ile ifrelenebilen ve zlebilen bir yap kurulabilmesi salanmaktadr. Tabi ki kriptolojik olarak buradaki ifreleme ilemini daha farkl algoritmalarla daha zorlatrabilir, belirli standartlar kullanarak da bunlarn farkl ortamlarla entegre olabilmesini salayabilirsiniz.


Original Link: https://dev.to/aciklab/golang-ile-sifreleme-islemleri-icin-crypto-paketi-eaa

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To