Bagaimana untuk menyahsulit mesej yang disulitkan menggunakan kunci peribadi RSA

PHPz
Lepaskan: 2024-02-09 15:30:20
ke hadapan
895 orang telah melayarinya

如何使用 RSA 私钥解密加密消息

editor php Youzi akan memperkenalkan anda cara menggunakan kunci peribadi RSA untuk menyahsulit mesej yang disulitkan. RSA ialah algoritma penyulitan asimetri yang menyulitkan dan menyahsulit maklumat dengan menjana kunci awam dan peribadi. Apabila menggunakan RSA untuk menyahsulit mesej yang disulitkan, anda perlu mempunyai kunci peribadi yang sepadan dan menggunakan kunci peribadi untuk menyahsulit mesej yang disulitkan. Semasa proses penyahsulitan, kunci peribadi akan menyahkod mesej yang disulitkan dan memulihkannya kepada maklumat plaintext asal. Dengan menguasai penyahsulitan kunci persendirian RSA, anda boleh menyampaikan dan melindungi maklumat sensitif dengan lebih selamat. Seterusnya, kami akan memperkenalkan langkah dan langkah berjaga-jaga untuk penyahsulitan kunci persendirian RSA secara terperinci untuk membantu anda memahami dan menggunakan teknologi penyulitan dan penyahsulitan ini dengan lebih baik.

Kandungan soalan

Saya sedang mengakses api yang memerlukan kunci awam saya, yang kemudiannya akan mengembalikan respons yang mengandungi vektor dan token, tetapi dalam bentuk yang disulitkan (saya rasa mereka menggunakan kunci awam saya untuk melakukannya pada ketika ini). Untuk menyahsulitnya saya perlu menggunakan kunci peribadi saya. Kedua-dua kunci peribadi dan awam dikodkan. Saya pada dasarnya mahu melaksanakan sesuatu seperti ini https://www.devglan.com/online-tools/rsa-encryption-decryption

Kunci yang saya gunakan (sekali lagi, ia adalah maya!) Awam: migfma0gcsqgsib3dqebaquaa4gnadcbiqkbgqcbi1sofn/zpsprblpaw/c4gdkho6idv3j/p5leeupasbvvpq6wy7tf6lfbstcirq48omd34p3z5sx1jyy15oxnxnkbpoodv8byqdnk/lffcz5 720yunka0xihuol/zi0c0pwb6hkaakt0sbeglbcux6yr6sbjbfai2ofikk/mgswidaqab

Swasta: miicdqibadanbgkqhkig9w0baqefaascal8wggjbageaaogbajsjvkh839k+ymsgu8bb9zgymoejoh2/cn8/ksqrskcxtvwmrrbjtn/qv8fjnykurjygwpfinfpmxfwnjlxk5c3e0og mg52/wfhb2cr8t8vxnnvbtjq2rrtgidsix9mlrzq9yhoeqacrpsxt4ytsk5frkvpjskevojah8gqt+yazagmbaaecgya5kaed/z8tmslujhxgajzzgldkczms6uhxasdw/1fwxooeatbs5ha7gumcerhkib sps8hmlkxgvp2sin/8fb9mo1yhaan2g52+cvpr2qmeeuowfuztm/gllt4ruib7smc5uxl7sw55bghrxqdfhjskow4rpga+irjuysy5gizswqjbandtff+vwpkrr8mhyvagollkra1cfn8g9x1ega3mgwpny oh5nmjfe0ibaxo69jlrnbajk+oxnpsyh/azzseehascqqc+f15dvsjh8tjsxz8rcdpmdp+p9j/eoi7+v0igwkaasjczfywxeckaaipvwit7fkj3n83nj0ppm9xwh22cygszakaaviwotleoken71v/tt kauyt32ahgwnkckwvwmv4/ws6rflcnvdxr/cnkcgeqlkxtlkkp /clg3gy6o2ymi5xnaka8l4jsycryb8sw0rlvomoq2vz/lacrnkzsecpywk4uupcu9ffrutaje6mnaj2pna9wjxw5c+exk5rcmq7rcgrxakajize3jbwuu3mx5tdmhfgcviz38jnfsujfryblkanjegod 4zcxrzxfo7ikda+ptfmre7ztnu7wucm0yut2qa0j

Mesej disulitkan: buy5nr/pujncfxeuxqd4oxkcvmo2jilwh5vkzlz1udm4m0vxdv4ba1oanhbttqetqeny1vfw2v4v9pw5hmdics1sdgn69ceehjbned46rk1evtmvqzgp9ha54axie5v/1t dkywj+aft0fxvj4kffxgxezf19q8lb2aojcaejk6s= Mari kita masuk ke bahagian pengekodan: Saya sedang mendapatkan semula kunci peribadi dan awam saya daripada fail env:

public := godotenvvariable("publickey")
private := godotenvvariable("privatekey")
Salin selepas log masuk

Kini, selepas menekan api dan mendapat keputusan, saya cuba menggunakan rsa.decryptoaep 函数解密消息,但它一直给我 [] crypto/rsa: 解密错误 . Selepas menyahpepijat di dalam pakej itu sendiri, saya mendapat ralat di sini:

k := priv.size() // private key size
if len(ciphertext) > k || //ciphertext is the encrypted text and hash.size()*2+2 is the hash size that im using
    k < hash.size()*2+2 {
    return nil, errdecryption
}
Salin selepas log masuk

Hasil pernyataan if: k = 128 hash.size()*2+2=66 cipher = 172 Pada mulanya saya menghadapi masalah menukar kunci persendirian (dalam kes saya rentetan kerana ia berasal dari fail env) kepada kunci persendirian rsa. Inilah yang saya lakukan untuk menyelesaikan isu tersebut:

senc, err := b64.stdencoding.decodestring(private) //using this package "encoding/base64"
Salin selepas log masuk

Kemudian saya menukarnya seperti ini:

block := &pem.Block{
    Type:  "RSA PRIVATE KEY",
    Bytes: sEnc,
    }
    parseResult, err := x509.ParsePKCS8PrivateKey(block.Bytes)
Salin selepas log masuk

Apa salah saya?

Penyelesaian

Jika rsa dipilih dalam medan Pilih Jenis Kata Laluan, tapak web devglan akan menggunakan pkcs#1 v1.5 sebagai padding dan oleh itu rsa.decryptpkcs1v15() 必须为用过的。私钥是 base64 编码的 pkcs#8 der 密钥,可以使用 x509.parsepkcs8privatekey() diimport.

Bersama:

import (
    "crypto/rand"
    "crypto/rsa"
    "crypto/x509"
    b64 "encoding/base64"
    "fmt"
)

func main() {

    // Base64 decode ciphertext
    ciphertext, _ := b64.StdEncoding.DecodeString("BUy5nR/PuJNCFXeUxQd4oxkCvMo2JiLwH5VkzLz1UdM4M0VXDv4Ba1OaNHbttqETQENy1VfW2V4v9Pw5HmDIcS1sdGN69ceEHJbned46rK1EVtMVQZGP9ha54AXie5v/1TdKYWJ+AFt0FxVj4kfFXGXEzF19Q8LB2AOJCAEJK6s=")

    // Import PKCS#8 key
    pkcs8DerKey, _ := b64.StdEncoding.DecodeString("MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAJsjVKh839k+ymsGU8Bb9zgYMoejoh2/cn8/ksQRSkCxtVWmrrBjtN/qV8FJNyKurjygwPfinfPmxfWNjLXk5c3E0oGmg52/wFhB2cr8t8VxnnvbTJQ2RrTGIdSiX9mLRzQ9YHoeQACRPSxt4YtsK5frKvpJskEVojah8gqT+YazAgMBAAECgYA5KaeD/Z8tmSlUjhxGAJzzGldkCzMs6uHxaSdW/1fwxooeaTBs5hA7gUmcerHKIbsps8HmlKXGvP2sIN/8Fb9mo1yHaAN2g52+cvpr2QmeeUOwfuZTM/gllT4rUIB7sMC5Uxl7sW55bGhRxqdfHJskow4rPga+irjuYSy5GIZSwQJBANDtfF+VWPKrR8MHYvaGoLLkrA1cFn8g9x1eGA3mgWPNYoH5nMJfe0IBaXo69jlrnBAjK+oxnPSyh/AZzsEehasCQQC+F15dVSjH8tJSXz8RCDpMdp+P9J/eoi7+V0IgwKAaSJCZfYWXeckAAIpvwit7fkj3n83nj0PPm9Xwh22CYGsZAkAAvIWOtLEOken71v/TTKAuYT32AhgWNKCKWvWMvv4/ws6RFLcnvDxr/CNKCgEqLKXtLKKP/cLG3gY6o2ymI5xnAkA8l4JSycRYB8SW0RlvOmoq2Vz/LACRnKzSEcpYWk4uUpcU9ffRUtaJE6MNAJ2Pna9wjxW5C+eXk5rcMq7rcgRxAkAjizE3JbwUu3MX5TDmHfGCvIZ38jnfSUjFrYBLKaNJegOD4zcxRZXfO7iKDa+PtFMRe7ZtnU7WuCM0yUT2Qa0j")
    key, _ := x509.ParsePKCS8PrivateKey(pkcs8DerKey)
    var privateKey *rsa.PrivateKey
    privateKey, _ = key.(*rsa.PrivateKey)

    // Decrypt (using RSA with PKCS#1 v1.5 padding)
    rng := rand.Reader
    plaintext, _ := rsa.DecryptPKCS1v15(rng, privateKey, ciphertext)

    fmt.Println(string(plaintext)) // {"token":"312ade4b52e7bb4cadf59b4c7c83cb41","vector":"2b8db4fdb11f361d","id":"63876cf63ec7a641db8f1def"}
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk menyahsulit mesej yang disulitkan menggunakan kunci peribadi RSA. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan