ホームページ  >  記事  >  バックエンド開発  >  golang コードは暗号化できますか?

golang コードは暗号化できますか?

尚
オリジナル
2019-12-28 14:38:013737ブラウズ

golang コードは暗号化できますか?

Golang コード暗号化方式:

DES 暗号化と復号化

Golang の標準ライブラリは crypto にあります/des DES の実装はありますが、golang ライブラリの記述は比較的単純です。DES の暗号化ルールに慣れていないと、対応するコードを書くのは簡単ではありません。また、次の場合に混乱しやすいです。異なる言語間での暗号化・復号化を第三者機関で行っているため、エラーが発生しました。

DES の暗号化と復号化に異なるプラットフォームと言語が接続されている場合、相手が使用する暗号化モードと充填方法を知る必要があります:

Windows のデフォルトは CBC モード、CryptSetKeyParam 関数です、openssl 関数名は直接示します

Java では、Cipher.getInstance() が入力されていない場合、デフォルトは DES/ECB/PKCS5Padding です

C# のデフォルトは CBC モード、PKCS7Padding です(PKCS5Padding)

Golang はデフォルトで CBC モードを提供するため、ECB モードの場合は独自のコードを記述する必要があります

PKCS5Padding および PKCS5Unpadding

    func PKCS5Padding(ciphertext []byte, blockSize int) []byte {
        padding := blockSize - len(ciphertext)%blockSize
        padtext := bytes.Repeat([]byte{byte(padding)}, padding)
        return append(ciphertext, padtext...)
    }
 
    func PKCS5Unpadding(origData []byte) []byte {
        length := len(origData)
        unpadding := int(origData[length-1])
        return origData[:(length - unpadding)]
    }

ECB 暗号化モード

 
        block, err := des.NewCipher(key)
        if err != nil {
            ...
        }
        bs := block.BlockSize()
        src = PKCS5Padding(src, bs)
        if len(src)%bs != 0 {
            ....
        }
        out := make([]byte, len(src))
        dst := out
        for len(src) > 0 {
            block.Encrypt(dst, src[:bs])
            src = src[bs:]
            dst = dst[bs:]
        }
        ...
    }

#RSA 暗号化と復号化

#デフォルトで高レベルのカプセル化を持つ他の言語とは異なり、golang はさまざまな概念に基づいて組み合わせてカプセル化する必要があります

PEM: 通常は .pem で終わります ファイルはキー ストレージと X.509 証明書システムでよく使用されます。X509 証明書の PEM 形式は次のとおりです:

-----BEGIN CERTIFICATE-----
    base64
-----END CERTIFICATE-----

PKCS: これは巨大なシステムであり、キーが異なれば、使用する pkcs ファイル形式も異なります。たとえば、秘密キーは pkcs8 を使用します。

XX.509: これは公開キー基盤 (pki) であり、通常は IETF の PKIX に対応します。

注:

openssl を使用して生成された pem ファイル (openssl genrsa -out rsa_private_key.pem 1024 など) は、-----BEGIN RSA PRIVATE KEY-- を含む PEM 形式に準拠しています。 ---先頭、-----END RSA PRIVATE KEY-----終了。

pkcs8:

openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt

に変換することもできます。上記の概念と形式を明確にすると、golang に対応した公開鍵と秘密鍵の暗号化および復号化メソッドを記述するのは比較的簡単になります。まず、pem ファイルをデコードし、次に対応するパスワードを golang でサポートされている構造にデコードし、対応する処理を実行します。

秘密鍵の場合、次の操作を実行して署名できます:

    block, _ := pem.Decode([]byte(key))
    if block == nil {       // 失败情况
        ....
    }
 
    private, err := x509.ParsePKCS8PrivateKey(block.Bytes)
    if err != nil {
        ...
    }
 
    h := crypto.Hash.New(crypto.SHA1)
    h.Write(data)
    hashed := h.Sum(nil)
 
    // 进行rsa加密签名
    signedData, err := rsa.SignPKCS1v15(rand.Reader, private.(*rsa.PrivateKey), crypto.SHA1, hashed)
    ...

golang の詳細については、

golang チュートリアル

列に注目してください。

以上がgolang コードは暗号化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。