zoukankan      html  css  js  c++  java
  • Go语言加解密--AES简单实践

    AES加解密的简单实现,代码如下。

    package main
    
    
    import (
    	"crypto/aes"
    	"crypto/cipher"
    	"encoding/hex"
    	"fmt"
    )
    
    func main(){
    
    	nonce := "37b8e8a308c354048d245f6d"
    	key := "AES256Key-32Characters1234567890"
    	plainText := "172.10.99.88"
    	cipherText :=	ExampleNewGCM_encrypt(plainText, key, nonce)
    	newPlain := ExampleNewGCM_decrypt(cipherText, key, nonce)
    
    
    	fmt.Println("plain:", plainText)
    	fmt.Println("cipher:", cipherText)
    	fmt.Println("new plain:", newPlain)
    }
    
    func ExampleNewGCM_encrypt(src, k, n string)string {
    	// The key argument should be the AES key, either 16 or 32 bytes
    	// to select AES-128 or AES-256.
    	key := []byte(k)
    	plaintext := []byte(src)
    
    	block, err := aes.NewCipher(key)
    	if err != nil {
    		panic(err.Error())
    	}
    
    	nonce, _ := hex.DecodeString(n)
    
    	aesgcm, err := cipher.NewGCM(block)
    	if err != nil {
    		panic(err.Error())
    	}
    
    	ciphertext := aesgcm.Seal(nil, nonce, plaintext, nil)
    
    	return fmt.Sprintf("%x", ciphertext)
    }
    
    func ExampleNewGCM_decrypt(src, k, n string) string {
    	// The key argument should be the AES key, either 16 or 32 bytes
    	// to select AES-128 or AES-256.
    	key := []byte(k)
    	ciphertext, _ := hex.DecodeString(src)
    
    	nonce, _ := hex.DecodeString(n)
    
    	block, err := aes.NewCipher(key)
    	if err != nil {
    		panic(err.Error())
    	}
    
    	aesgcm, err := cipher.NewGCM(block)
    	if err != nil {
    		panic(err.Error())
    	}
    
    	plaintext, err := aesgcm.Open(nil, nonce, ciphertext, nil)
    	if err != nil {
    		panic(err.Error())
    	}
    
    	return string(plaintext)
    }
    
    

    Output:

    plain: 172.10.99.88
    cipher: 4456f9258c204906cbb2516e1fc78c3fbbf439e9e7d49189a391ee33
    new plain: 172.10.99.88

  • 相关阅读:
    MySQL 中视图和表的区别以及联系是什么?
    MAC将根目录文件夹的权限赋给用户
    PHP 基础篇 PHP 中 DES 加解密详解
    软件构架师必修科(转)
    遍历指定文件夹下所有的xml文件并动态生成HTML页面!
    使用XML创建Excel文档
    XmlTextWriter创建XML文件
    什么是耦合?
    JavaScript经典效果集锦(一)
    软件最大的追求是什么?
  • 原文地址:https://www.cnblogs.com/lanyangsh/p/8686014.html
Copyright © 2011-2022 走看看