La sección anterior describe cómo almacenar las contraseñas, pero a veces queremos cambiar algunos datos sensibles encriptados y almacenados en algún momento en el futuro, con la necesidad de descifrarlos, entonces debemos utilizar un algoritmo de cifrado simétrico para satisfacer nuestras necesidades.
Si la aplicación web es bastante simple, la seguridad de datos es sin requisitos menos estrictos, entonces usted puede utilizar un método relativamente simple de cifrado y descifrado es base64 , este enfoque es relativamente fácil de implementar, el lenguaje Go tiene el paquete base64 y ha a sido bien el apoyo de esto, considere los siguientes ejemplos:
package main
import (
"encoding/base64"
"fmt"
)
func base64Encode(src []byte) []byte {
return []byte(base64.StdEncoding.EncodeToString(src))
}
func base64Decode(src []byte) ([]byte, error) {
return base64.StdEncoding.DecodeString(string(src))
}
func main() {
// encode
hello := "你好,世界! hello world"
debyte := base64Encode([]byte(hello))
fmt.Println(debyte)
// decode
enbyte, err := base64Decode(debyte)
if err != nil {
fmt.Println(err.Error())
}
if hello != string(enbyte) {
fmt.Println("hello is not equal to enbyte")
}
fmt.Println(string(enbyte))
}
Go dentro de la criptografía soporte de idiomas cifrado paquete de cifrado avanzado simétrica son:
crypto/aes
package: AES (Advanced Encryption Standard), conocido también como método de cifrado Rijndael utilizado es el gobierno federal de los EE.UU. como un estándar de cifrado de bloque.crypto/des
package: DES (Data Encryption Standard), es un estándar de cifrado simétrico, es actualmente el sistema de clave más utilizado, sobre todo en la protección de la seguridad de los datos financieros. Estaba un estándar de cifrado gobierno federal de los Estados Unidos, pero ahora ha sido reemplazado por AES.
Debido a estos dos algoritmos utilizando métodos similares a, por lo que en este, sólo AES paquete como un ejemplo para explicar su uso, vea el siguiente ejemplo
package main
import (
"crypto/aes"
"crypto/cipher"
"fmt"
"os"
)
var commonIV = []byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}
func main() {
// Need to encrypt a string
plaintext := []byte("My name is Astaxie")
// If the incoming encrypted strings of words, plaint is that the incoming string
if len(os.Args) > 1 {
plaintext = []byte(os.Args[1])
}
// aes encryption string
key_text := "astaxie12798akljzmknm.ahkjkljl;k"
if len(os.Args) > 2 {
key_text = os.Args[2]
}
fmt.Println(len(key_text))
// Create the encryption algorithm aes
c, err := aes.NewCipher([]byte(key_text))
if err != nil {
fmt.Printf("Error: NewCipher(%d bytes) = %s", len(key_text), err)
os.Exit(-1)
}
// Encrypted string
cfb := cipher.NewCFBEncrypter(c, commonIV)
ciphertext := make([]byte, len(plaintext))
cfb.XORKeyStream(ciphertext, plaintext)
fmt.Printf("%s=>%x\n", plaintext, ciphertext)
// Decrypt strings
cfbdec := cipher.NewCFBDecrypter(c, commonIV)
plaintextCopy := make([]byte, len(plaintext))
cfbdec.XORKeyStream(plaintextCopy, ciphertext)
fmt.Printf("%x=>%s\n", ciphertext, plaintextCopy)
}
Por encima llamando a la función aes.NewCipher (tecla parámetro debe ser 16, 24 o 32 de la [] bytes, respectivamente, correspondientes a la AES-128, AES-192 o el algoritmo AES-256), devuelve un cipher.Block Interfaz este interfaz implementa tres funciones:
type Block interface {
// BlockSize returns the cipher's block size.
BlockSize() int
// Encrypt encrypts the first block in src into dst.
// Dst and src may point at the same memory.
Encrypt(dst, src []byte)
// Decrypt decrypts the first block in src into dst.
// Dst and src may point at the same memory.
Decrypt(dst, src []byte)
}
Estas tres funciones implementan operaciones de cifrado y descifrado, una visión detallada de la operación del ejemplo anterior.
En esta sección se describen varios algoritmos de cifrado, cuando el desarrollo de aplicaciones web se puede utilizar de diferentes maneras de acuerdo a la demanda para el cifrado y el descifrado, la aplicación general del algoritmo base 64 se puede utilizar, entonces usted puede utilizar más avanzado o algoritmo AES DES.
- Directory
- Previous: store passwords
- Next: Summary