亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

annuaire recherche
archive archive/tar archive/zip bufio bufio(緩存) builtin builtin(內置包) bytes bytes(包字節(jié)) compress compress/bzip2(壓縮/bzip2) compress/flate(壓縮/flate) compress/gzip(壓縮/gzip) compress/lzw(壓縮/lzw) compress/zlib(壓縮/zlib) container container/heap(容器數據結構heap) container/list(容器數據結構list) container/ring(容器數據結構ring) context context(上下文) crypto crypto(加密) crypto/aes(加密/aes) crypto/cipher(加密/cipher) crypto/des(加密/des) crypto/dsa(加密/dsa) crypto/ecdsa(加密/ecdsa) crypto/elliptic(加密/elliptic) crypto/hmac(加密/hmac) crypto/md5(加密/md5) crypto/rand(加密/rand) crypto/rc4(加密/rc4) crypto/rsa(加密/rsa) crypto/sha1(加密/sha1) crypto/sha256(加密/sha256) crypto/sha512(加密/sha512) crypto/subtle(加密/subtle) crypto/tls(加密/tls) crypto/x509(加密/x509) crypto/x509/pkix(加密/x509/pkix) database database/sql(數據庫/sql) database/sql/driver(數據庫/sql/driver) debug debug/dwarf(調試/dwarf) debug/elf(調試/elf) debug/gosym(調試/gosym) debug/macho(調試/macho) debug/pe(調試/pe) debug/plan9obj(調試/plan9obj) encoding encoding(編碼) encoding/ascii85(編碼/ascii85) encoding/asn1(編碼/asn1) encoding/base32(編碼/base32) encoding/base64(編碼/base64) encoding/binary(編碼/binary) encoding/csv(編碼/csv) encoding/gob(編碼/gob) encoding/hex(編碼/hex) encoding/json(編碼/json) encoding/pem(編碼/pem) encoding/xml(編碼/xml) errors errors(錯誤) expvar expvar flag flag(命令行參數解析flag包) fmt fmt go go/ast(抽象語法樹) go/build go/constant(常量) go/doc(文檔) go/format(格式) go/importer go/parser go/printer go/scanner(掃描儀) go/token(令牌) go/types(類型) hash hash(散列) hash/adler32 hash/crc32 hash/crc64 hash/fnv html html html/template(模板) image image(圖像) image/color(顏色) image/color/palette(調色板) image/draw(繪圖) image/gif image/jpeg image/png index index/suffixarray io io io/ioutil log log log/syslog(日志系統(tǒng)) math math math/big math/big math/bits math/bits math/cmplx math/cmplx math/rand math/rand mime mime mime/multipart(多部分) mime/quotedprintable net net net/http net/http net/http/cgi net/http/cookiejar net/http/fcgi net/http/httptest net/http/httptrace net/http/httputil net/http/internal net/http/pprof net/mail net/mail net/rpc net/rpc net/rpc/jsonrpc net/smtp net/smtp net/textproto net/textproto net/url net/url os os os/exec os/signal os/user path path path/filepath(文件路徑) plugin plugin(插件) reflect reflect(反射) regexp regexp(正則表達式) regexp/syntax runtime runtime(運行時) runtime/debug(調試) runtime/internal/sys runtime/pprof runtime/race(競爭) runtime/trace(執(zhí)行追蹤器) sort sort(排序算法) strconv strconv(轉換) strings strings(字符串) sync sync(同步) sync/atomic(原子操作) syscall syscall(系統(tǒng)調用) testing testing(測試) testing/iotest testing/quick text text/scanner(掃描文本) text/tabwriter text/template(定義模板) text/template/parse time time(時間戳) unicode unicode unicode/utf16 unicode/utf8 unsafe unsafe
personnages

  • import "crypto/rsa"

  • 概述

  • 索引

  • 示例

概述

軟件包 rsa 按照 PKCS#1 中的規(guī)定實現(xiàn) RSA 加密。

RSA 是一個單一的基本操作,用于實現(xiàn)公鑰加密或公鑰簽名。

RSA的原始加密和簽名規(guī)范是 PKCS#1,默認情況下,術語“RSA encryption”和“RSA signatures”是指 PKCS#1 1.5版本。但是,該規(guī)范存在缺陷,新設計應該使用版本2,通常只需通過 OAEP 和 PSS 即可調用。

該套件包含兩套接口。當一個更抽象的接口不是必需的時候,可以使用 v1.5/OAEP 進行加密(encrypting)/解密(decrypting)以及使用 v1.5/PSS 進行簽名/驗證。如果需要通過公鑰基元進行抽象,那么 PrivateKey 結構將從加密包中實現(xiàn) Decrypter 和 Signer 接口。

此包中的 RSA 操作不是使用恒定時間算法實現(xiàn)的。

索引

  • 常量

  • 變量

  • func DecryptOAEP(hash hash.Hash, random io.Reader, priv *PrivateKey, ciphertext []byte, label []byte) ([]byte, error)

  • func DecryptPKCS1v15(rand io.Reader, priv *PrivateKey, ciphertext []byte) ([]byte, error)

  • func DecryptPKCS1v15SessionKey(rand io.Reader, priv *PrivateKey, ciphertext []byte, key []byte) error

  • func EncryptOAEP(hash hash.Hash, random io.Reader, pub *PublicKey, msg []byte, label []byte) ([]byte, error)

  • func EncryptPKCS1v15(rand io.Reader, pub *PublicKey, msg []byte) ([]byte, error)

  • func SignPKCS1v15(rand io.Reader, priv *PrivateKey, hash crypto.Hash, hashed []byte) ([]byte, error)

  • func SignPSS(rand io.Reader, priv *PrivateKey, hash crypto.Hash, hashed []byte, opts *PSSOptions) ([]byte, error)

  • func VerifyPKCS1v15(pub *PublicKey, hash crypto.Hash, hashed []byte, sig []byte) error

  • func VerifyPSS(pub *PublicKey, hash crypto.Hash, hashed []byte, sig []byte, opts *PSSOptions) error

  • type CRTValue

  • type OAEPOptions

  • type PKCS1v15DecryptOptions

  • type PSSOptions

  • func (pssOpts *PSSOptions) HashFunc() crypto.Hash

  • type PrecomputedValues

  • type PrivateKey

  • func GenerateKey(random io.Reader, bits int) (*PrivateKey, error)

  • func GenerateMultiPrimeKey(random io.Reader, nprimes int, bits int) (*PrivateKey, error)

  • func (priv *PrivateKey) Decrypt(rand io.Reader, ciphertext []byte, opts crypto.DecrypterOpts) (plaintext []byte, err error)

  • func (priv *PrivateKey) Precompute()

  • func (priv *PrivateKey) Public() crypto.PublicKey

  • func (priv *PrivateKey) Sign(rand io.Reader, msg []byte, opts crypto.SignerOpts) ([]byte, error)

  • func (priv *PrivateKey) Validate() error

  • type PublicKey

示例

DecryptOAEP DecryptPKCS1v15SessionKey EncryptOAEP SignPKCS1v15 VerifyPKCS1v15

包文件

pkcs1v15.go pss.go rsa.go

常量

const (        // PSSSaltLengthAuto導致PSS簽名中的salt一樣大        // 簽名時盡可能,并在驗證時自動檢測。
        PSSSaltLengthAuto = 0        // PSSSaltLengthEqualsHash使salt長度等于長度        // 簽名中使用的哈希值
        PSSSaltLengthEqualsHash = -1)

變量

ErrDecryption 表示解密消息失敗。故意避免適應性攻擊是模糊的。

var ErrDecryption = errors.New("crypto/rsa: decryption error")

嘗試加密對于公鑰大小來說太大的消息時會返回 ErrMessageTooLong。

var ErrMessageTooLong = errors.New("crypto/rsa: message too long for RSA public key size")

ErrVerification 表示驗證簽名失敗。故意避免適應性攻擊是模糊的。

var ErrVerification = errors.New("crypto/rsa: verification error")

func DecryptOAEP

func DecryptOAEP(hash hash.Hash, random io.Reader, priv *PrivateKey, ciphertext []byte, label []byte) ([]byte, error)

OAEP 通過散列函數進行參數化,散列函數用作隨機預言器。給定消息的加密和解密必須使用相同的散列函數,sha256.New() 是一個合理的選擇。

隨機參數(如果不是零)用于隱藏私鑰操作并避免定時旁信道攻擊。盲目性僅限于此函數 - 隨機數據不需要與加密時使用的數據相匹配。

標簽參數必須與加密時給出的值匹配。有關詳細信息,請參閱 EncryptOAEP。

示例

代碼:

ciphertext, _ := hex.DecodeString("4d1ee10e8f286390258c51a5e80802844c3e6358ad6690b7285218a7c7ed7fc3a4c7b950fbd04d4b0239cc060dcc7065ca6f84c1756deb71ca5685cadbb82be025e16449b905c568a19c088a1abfad54bf7ecc67a7df39943ec511091a34c0f2348d04e058fcff4d55644de3cd1d580791d4524b92f3e91695582e6e340a1c50b6c6d78e80b4e42c5b4d45e479b492de42bbd39cc642ebb80226bb5200020d501b24a37bcc2ec7f34e596b4fd6b063de4858dbf5a4e3dd18e262eda0ec2d19dbd8e890d672b63d368768360b20c0b6b8592a438fa275e5fa7f60bef0dd39673fd3989cc54d2cb80c08fcd19dacbc265ee1c6014616b0e04ea0328c2a04e73460")label := []byte("orders")// crypto / rand.Reader是阻塞RSA的良好熵源// 操作。rng := rand.Reader

plaintext, err := DecryptOAEP(sha256.New(), rng, test2048Key, ciphertext, label)if err != nil {
        fmt.Fprintf(os.Stderr, "Error from decryption: %s\n", err)        return}fmt.Printf("Plaintext: %s\n", string(plaintext))// 請記住,加密僅提供機密性。該// 密文應該在假定真實性之前簽署,甚至// 甚至,考慮消息可能會被重新排序。

func DecryptPKCS1v15

func DecryptPKCS1v15(rand io.Reader, priv *PrivateKey, ciphertext []byte) ([]byte, error)

DecryptPKCS1v15 使用 RSA和PKCS#1 v1.5 的填充方案解密明文。如果 rand!= nil,它使用RSA盲法來避免定時側信道攻擊。

請注意,該函數是否返回錯誤或不公開秘密信息。如果攻擊者可以導致這個函數重復運行并且知道每個實例是否返回錯誤,那么他們可以解密并偽造簽名,就好像他們擁有私鑰一樣。請參閱 DecryptPKCS1v15SessionKey 以解決此問題。

func DecryptPKCS1v15SessionKey

func DecryptPKCS1v15SessionKey(rand io.Reader, priv *PrivateKey, ciphertext []byte, key []byte) error

DecryptPKCS1v15SessionKey 使用 RSA 和 PKCS#1 v1.5 中的填充方案來解密會話密鑰。如果rand != nil,則它使用 RSA 致盲來避免定時旁路通道攻擊。如果密文長度不正確或者密文大于公共模數,它將返回一個錯誤。否則,不會返回錯誤。如果填充有效,則將生成的明文消息復制到密鑰中。否則,密鑰不變。這些替代方案會在一段時間內發(fā)生 預期該功能的用戶預先生成一個隨機會話密鑰,然后繼續(xù)使用所得值的協(xié)議。這將消除攻擊者可以獲知有關明文的任何信息的可能性。請參閱“Chosen Ciphertext Attacks Against Protocols Based on the RSA Encryption Standard PKCS #1(基于RSA加密標準PKCS#1選擇的針對協(xié)議的密文攻擊)”, Daniel Bleichenbacher, Advances in Cryptology (Crypto '98)。

請注意,如果會話密鑰太小,攻擊者可能會對其進行暴力破解。如果他們可以這樣做,那么他們可以知道是否使用了隨機值(因為它對于相同的密文會有所不同),因此是否填充是正確的。這打破了這個功能的重點。使用至少一個16字節(jié)的密鑰可以防止這種攻擊。

示例

RSA 只能加密非常有限的數據量。為了加密合理數量的數據,通常使用混合方案:RSA 用于加密對稱原語(如AES-GCM)的密鑰。在加密之前,通過將數據嵌入到已知結構中來“padded”數據。這是由于許多原因,但最明顯的是確保值足夠大,以使得指數大于模數。(否則可以用平方根進行解密)。在這些設計中,使用 PKCS#1 v1.5 時,避免公開接收到的 RSA 消息是否格式良好(也就是解密結果是正確填充的消息),因為這泄漏了秘密信息。DecryptPKCS1v15SessionKey 專為這種情況而設計,并將解密,對稱密鑰(如果格式良好)通過包含隨機密鑰的緩沖區(qū)進行常量化。因此,如果 RSA 結果不是格式良好的,那么實現(xiàn)會在一段時間內使用一個隨機密鑰。

代碼:

// crypto/rand.Reader是阻塞RSA的良好熵源// 操作。rng := rand.Reader// 混合方案應該使用至少一個16字節(jié)的對稱密鑰。 這里// 我們讀取了RSA解密時不會使用的隨機密鑰// 良好的。key := make([]byte, 32)if _, err := io.ReadFull(rng, key); err != nil {        panic("RNG failure")}rsaCiphertext, _ := hex.DecodeString("aabbccddeeff")if err := DecryptPKCS1v15SessionKey(rng, rsaPrivateKey, rsaCiphertext, key); err != nil {        // 任何導致的錯誤都將是“public” - 意味著它們        // 可以確定沒有任何秘密信息。 (對于        // 例如,如果給定RSA,則密鑰的長度是不可能的        // 公鑰。)
        fmt.Fprintf(os.Stderr, "Error from RSA decryption: %s\n", err)        return}// 給定得到的密鑰,可以使用對稱方案來解密a// 更大的密文。block, err := aes.NewCipher(key)if err != nil {        panic("aes.NewCipher failed: " + err.Error())}// 由于密鑰是隨機的,因此使用固定的隨機數是可以接受的// 根據需要,(key, nonce)對仍然是唯一的。var zeroNonce [12]byte
aead, err := cipher.NewGCM(block)if err != nil {        panic("cipher.NewGCM failed: " + err.Error())}ciphertext, _ := hex.DecodeString("00112233445566")plaintext, err := aead.Open(nil, zeroNonce[:], ciphertext, nil)if err != nil {        // RSA密文形成錯誤; 解密會        // 因為AES-GCM密鑰不正確而在這里失敗。
        fmt.Fprintf(os.Stderr, "Error decrypting: %s\n", err)        return}fmt.Printf("Plaintext: %s\n", string(plaintext))

func EncryptOAEP

func EncryptOAEP(hash hash.Hash, random io.Reader, pub *PublicKey, msg []byte, label []byte) ([]byte, error)

EncryptOAEP 使用 RSA-OAEP 加密給定的消息。

OAEP 通過散列函數進行參數化,散列函數用作隨機預言器。給定消息的加密和解密必須使用相同的散列函數,sha256.New() 是一個合理的選擇。

隨機參數被用作熵的來源以確保兩次加密相同的消息不會導致相同的密文。

標簽參數可以包含任何不會被加密的數據,但是它給消息提供了重要的上下文。例如,如果使用給定的公鑰來解密兩種類型的消息,則可以使用不同的標簽值來確保用于一個目的的密文不能被攻擊者用于另一個目的。如果不需要,它可以是空的。

消息必須不超過公共模數的長度減去散列長度的兩倍,再減去2。

示例

代碼:

secretMessage := []byte("send reinforcements, we're going to advance")label := []byte("orders")// crypto/rand.Reader是隨機化的一個很好的熵源// 加密函數。rng := rand.Reader

ciphertext, err := EncryptOAEP(sha256.New(), rng, &test2048Key.PublicKey, secretMessage, label)if err != nil {
        fmt.Fprintf(os.Stderr, "Error from encryption: %s\n", err)        return}// 由于加密是隨機函數,密文將是// 每次都不一樣。fmt.Printf("Ciphertext: %x\n", ciphertext)

func EncryptPKCS1v15

func EncryptPKCS1v15(rand io.Reader, pub *PublicKey, msg []byte) ([]byte, error)

EncryptPKCS1v15 使用 RSA 和 PKCS#1 v1.5 中的填充方案加密給定的消息。消息必須不超過公共模數減去11個字節(jié)的長度。

rand 參數被用作熵的來源以確保兩次加密相同的消息不會導致相同的密文。

警告:使用此功能來加密會話密鑰以外的明文是很危險的。在新協(xié)議中使用 RSA OAEP。

func SignPKCS1v15

func SignPKCS1v15(rand io.Reader, priv *PrivateKey, hash crypto.Hash, hashed []byte) ([]byte, error)

SignPKCS1v15 使用來自 RSA PKCS#1 v1.5 的 RSASSA-PKCS1-V1_5-SIGN 計算散列簽名。請注意,散列必須是使用給定散列函數散列輸入消息的結果。如果散列值為零,則直接對散列值進行簽名。除互操作性之外,這不可取。

如果 rand 不是零,那么將使用 RSA 致盲來避免定時旁路信道攻擊。

這個功能是確定性的。因此,如果這組可能的消息很小,攻擊者可能能夠從消息到簽名建立一個映射并識別簽名的消息。與以往一樣,簽名提供真實性,而不是保密性。

示例

代碼:

// crypto/rand.Reader是阻塞RSA的良好熵源// 操作rng := rand.Reader

message := []byte("message to be signed")// 只能直接簽署小郵件; 因此以下的哈希// 消息,而不是消息本身,簽署。 這需要// 哈希函數是抗沖突的。 SHA-256是// 當時應該使用的最強哈希函數// writing(2016)。hashed := sha256.Sum256(message)signature, err := SignPKCS1v15(rng, rsaPrivateKey, crypto.SHA256, hashed[:])if err != nil {
        fmt.Fprintf(os.Stderr, "Error from signing: %s\n", err)        return}fmt.Printf("Signature: %x\n", signature)

func SignPSS

func SignPSS(rand io.Reader, priv *PrivateKey, hash crypto.Hash, hashed []byte, opts *PSSOptions) ([]byte, error)

SignPSS 使用 RSASSA-PSS 1 計算散列的簽名。注意,散列必須是使用給定散列函數散列輸入消息的結果。opts 參數可能為零,在這種情況下,使用明智的默認值。

func VerifyPKCS1v15

func VerifyPKCS1v15(pub *PublicKey, hash crypto.Hash, hashed []byte, sig []byte) error

VerifyPKCS1v15 驗證 RSA PKCS#1 v1.5 簽名。散列是使用給定散列函數散列輸入消息的結果,sig 是簽名。返回零錯誤表示有效簽名。如果散列值為零,則直接使用散列值。除互操作性之外,這不可取。

示例

代碼:

message := []byte("message to be signed")signature, _ := hex.DecodeString("ad2766728615cc7a746cc553916380ca7bfa4f8983b990913bc69eb0556539a350ff0f8fe65ddfd3ebe91fe1c299c2fac135bc8c61e26be44ee259f2f80c1530")// 只能直接簽署小郵件; 因此以下的哈希// 消息,而不是消息本身,簽署。 這需要// 哈希函數是抗沖突的。 SHA-256是// 當時應該使用的最強哈希函數// writing (2016)。hashed := sha256.Sum256(message)err := VerifyPKCS1v15(&rsaPrivateKey.PublicKey, crypto.SHA256, hashed[:], signature)if err != nil {
        fmt.Fprintf(os.Stderr, "Error from verification: %s\n", err)        return}// 簽名是來自公鑰的消息的有效簽名。

func VerifyPSS

func VerifyPSS(pub *PublicKey, hash crypto.Hash, hashed []byte, sig []byte, opts *PSSOptions) error

VerifyPSS 驗證 PSS 簽名。散列是使用給定散列函數散列輸入消息的結果,sig 是簽名。返回零錯誤表示有效簽名。opts 參數可能為零,在這種情況下,使用明智的默認值。

type CRTValue

CRTValue包含預先計算的中國剩余定理值。

type CRTValue struct {
        Exp   *big.Int // D mod (prime-1).
        Coeff *big.Int // R·Coeff ≡ 1 mod Prime.
        R     *big.Int // 在此之前的素數乘積(inc p和q)。}

type OAEPOptions

OAEPOptions 是使用 crypto.Decrypter 接口將選項傳遞給 OAEP 解密的接口。

type OAEPOptions struct {        // 散列是生成掩碼時將使用的散列函數。
        Hash crypto.Hash        // Label是一個任意字節(jié)字符串,必須等于該值        // 加密時使用。
        Label []byte}

type PKCS1v15DecryptOptions

PKCS1v15DecrypterOpts 用于使用 crypto.Decrypter 接口將選項傳遞給 PKCS#1 v1.5 解密。

type PKCS1v15DecryptOptions struct {        // SessionKeyLen是正在進行的會話密鑰的長度        // 解密。 如果不為零,則解密期間的填充錯誤將        // 導致返回此長度的隨機明文而不是        // 一個錯誤。 這些替代方案在不斷的時間內發(fā)
        SessionKeyLen int}

type PSSOptions

PSSOptions 包含用于創(chuàng)建和驗證 PSS 簽名的選項。

type PSSOptions struct {        // SaltLength 控制 PSS 中使用的salt 的長度        // 簽名。 它可以是多個字節(jié),也可以是特殊字節(jié)之一        // PSSSaltLength常數。
        SaltLength int        // 散列(如果不為零)會覆蓋傳遞給SignPSS的散列函數。        // 這是使用時指定哈希函數的唯一方法        // crypto.Signer接口。
        Hash crypto.Hash}

func (*PSSOptions) HashFunc

func (pssOpts *PSSOptions) HashFunc() crypto.Hash

HashFunc 返回 pssOpts.Hash,以便 PSSOptions 實現(xiàn) crypto.SignerOpts。

type PrecomputedValues

type PrecomputedValues struct {
        Dp, Dq *big.Int // D mod (P-1) (or mod Q-1)
        Qinv   *big.Int // Q^-1 mod P        // CRTValues用于第3和隨后的素數。 由于一個        // 歷史事故,處理前兩個素數的CRT        // 在PKCS#1中有所不同,互操作性足夠        // 重要的是我們反映了這一點
        CRTValues []CRTValue}

type PrivateKey

一個 PrivateKey 表示一個 RSA 密鑰

type PrivateKey struct {
        PublicKey            // 公共部分。
        D         *big.Int   // 私有指數
        Primes    []*big.Int // N的素因子有> = 2個元素。        // 預計算包含加速私有的預計算值        // 操作,如果有的話。
        Precomputed PrecomputedValues}

func GenerateKey

func GenerateKey(random io.Reader, bits int) (*PrivateKey, error)

GenerateKey 使用隨機源隨機(例如,crypto/rand.Reader)生成給定位大小的 RSA 密鑰對。

func GenerateMultiPrimeKey

func GenerateMultiPrimeKey(random io.Reader, nprimes int, bits int) (*PrivateKey, error)

GenerateMultiPrimeKey 生成一個給定位大小的多素數 RSA 密鑰對和給定的隨機源,如1所示。雖然公鑰與2素的情況相兼容(實際上難以區(qū)分),但私鑰不是。因此,可能無法以某些格式導出多主密鑰私鑰或隨后將其導入其他代碼。

表1中的2表示給定大小的素數的最大數目。

1 US patent 4405829 (1972, expired) 2(http://www.cacr.math.uwaterloo.ca/techreports/2006/cacr2006-16.pdf)

func (*PrivateKey) Decrypt

func (priv *PrivateKey) Decrypt(rand io.Reader, ciphertext []byte, opts crypto.DecrypterOpts) (plaintext []byte, err error)

解密用 priv 解密密文。如果 opts 為零或類型為 * PKCS1v15DecryptOptions,則執(zhí)行 PKCS#1 v1.5 解密。否則,opts 必須具有類型 * OAEPOptions,并且完成 OAEP 解密。

func (*PrivateKey) Precompute

func (priv *PrivateKey) Precompute()

預計算執(zhí)行一些計算,以加速未來的私鑰操作。

func (*PrivateKey) Public

func (priv *PrivateKey) Public() crypto.PublicKey

公共返回與 priv 相對應的公鑰。

func (*PrivateKey) Sign

func (priv *PrivateKey) Sign(rand io.Reader, msg []byte, opts crypto.SignerOpts) ([]byte, error)

用 priv 簽名msg,從 rand 中讀取隨機數。如果opts 是 *PSSOptions,那么將使用 PSS 算法,否則將使用 PKCS#1 v1.5。此方法旨在支持保留私有部分的密鑰,例如,硬件模塊。常見用法應該在這個包中使用 Sign* 函數。

func (*PrivateKey) Validate

func (priv *PrivateKey) Validate() error

驗證對密鑰執(zhí)行基本的完整性檢查。如果密鑰有效,則返回nil,否則返回描述問題的錯誤。

type PublicKey

公鑰代表 RSA 密鑰的公共部分。

type PublicKey struct {
        N *big.Int // 模塊
        E int      // 公共指數}
Article précédent: Article suivant: