J'avais l'habitude d'utiliser Azure KeyValut de golang pour crypter des données, mais je n'avais pas les ressources, je l'ai donc résumé brièvement.
Le premier est le code pour l'authentification Azure. Les variables d'environnement suivantes sont requises pour l'authentification avec NewAuthorizerFromEnvironment ().
Variable d'environnement | Explication |
---|---|
AZURE_TENANT_ID | ID de locataire Azure |
AZURE_CLIENT_ID | ID client Azure |
AZURE_CERTIFICATE_PATH | Chemin du certificat pour l'authentification |
AZURE_CERTIFICATE_PASSWORD | Mot de passe de décryptage pour le certificat d'authentification |
azure.go (code d'authentification azure)
package auth
import (
"log"
ka "github.com/Azure/azure-sdk-for-go/services/keyvault/auth"
"github.com/Azure/go-autorest/autorest"
)
var (
AzureAuthorizer autorest.Authorizer
)
func init() {
var err error
AzureAuthorizer, err = ka.NewAuthorizerFromEnvironment()
if err != nil {
log.Fatal(err)
}
}
Vient ensuite la mise en œuvre du traitement de cryptage / décryptage. Tout ce que vous avez à faire est d'exécuter la méthode fournie par Azure. Les variables d'environnement suivantes sont requises.
Variable d'environnement | Explication |
---|---|
AZURE_VAULT_BASE_URL | URL de base Azure KeyVault(xxx.vault.azure.net) |
AZURE_VAULT_GENERAL_KEY_NAME | Nom de clé par défaut utilisé pour un nom de clé non spécifié |
key.go Traitement de cryptage / décryptage
package vault
import (
"context"
"log"
"os"
kv "github.com/Azure/azure-sdk-for-go/services/keyvault/v7.0/keyvault"
"./auth"
)
var (
VaultBaseURL string
GeneralKeyName string
)
func init() {
VaultBaseURL = os.Getenv("AZURE_VAULT_BASE_URL")
if len(VaultBaseURL) == 0 {
log.Fatal("Please set environment variable \"AZURE_VAULT_BASE_URL\"")
}
GeneralKeyName = os.Getenv("AZURE_VAULT_GENERAL_KEY_NAME")
if len(GeneralKeyName) == 0 {
log.Fatal("Please set environment variable \"AZURE_VAULT_GENERAL_KEY_NAME\"")
}
}
// keyVersion = "" -> use current key version
func Encrypt(keyName string, keyVersion string, plain *string) (kv.KeyOperationResult, error) {
params := kv.KeyOperationsParameters{
Algorithm: kv.RSAOAEP256,
Value: plain,
}
c := kv.New()
c.Authorizer = auth.AzureAuthorizer
return c.Encrypt(context.Background(), VaultBaseURL, keyName, keyVersion, params)
}
// keyVersion = "" -> use current key version
func GeneralEncrypt(plain *string) (kv.KeyOperationResult, error) {
return Encrypt(GeneralKeyName, "", plain)
}
// keyVersion = "" -> use current key version
func Decrypt(keyName string, keyVersion string, encrypted *string) (kv.KeyOperationResult, error) {
params := kv.KeyOperationsParameters{
Algorithm: kv.RSAOAEP256,
Value: encrypted,
}
c := kv.New()
c.Authorizer = auth.AzureAuthorizer
return c.Decrypt(context.Background(), VaultBaseURL, keyName, keyVersion, params)
}
// keyVersion = "" -> use current key version
func GeneralDecrypt(keyVersion string, encrypted *string) (kv.KeyOperationResult, error) {
return Decrypt(GeneralKeyName, keyVersion, encrypted)
}
main.go
plain := hex.EncodeToString([]byte("plain text"))
enc, _ := vault.GeneralEncrypt(&plain)
encrypted := *enc.Result
keyName := vault.GeneralKeyName
keyVersion := path.Base(*enc.Kid)
dec, _ := vault.Decrypt(keyName, keyVersion, &encrypted)
str, _ := hex.DecodeString(*dec.Result)
Recommended Posts