第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Map 類型的 map[*rsa.PublicKey]*rsa.私鑰具有值,但返回 nil

Map 類型的 map[*rsa.PublicKey]*rsa.私鑰具有值,但返回 nil

Go
至尊寶的傳說 2022-08-24 19:02:40
我有一個(gè)保存標(biāo)題類型定義的結(jié)構(gòu)。我創(chuàng)建了一個(gè)應(yīng)該在映射中返回值的方法,但它得到的為零。我懷疑這是因?yàn)樗幚碇羔樀姆绞?,但我不確定它在哪里或如何出錯(cuò)。發(fā)生了什么事情?以下是我為查看正在發(fā)生的事情而投入的一些額外內(nèi)容的片段:func (s *stctClientPubKeys) GetServerPrivateKey(keyClientPubkey *rsa.PublicKey) *rsa.PrivateKey {var keyPrivateKey *rsa.PrivateKeys.RLock()keyPrivateKey = s.mpClientPubKeys[keyClientPubkey]s.RUnlock()// TODO Remove thisfmt.Print("KEYINSTRUCT ")fmt.Println(keyPrivateKey)s.RLock()fmt.Print("WHOLEMAPINSTRUCT ")fmt.Println(s.mpClientPubKeys)for k, v := range s.mpClientPubKeys {    chnLogging <- "GetServerPrivateKey(): Recv N = " + keyClientPubkey.N.String()    chnLogging <- "GetServerPrivateKey(): Key N  = " + k.N.String()    chnLogging <- "GetServerPrivateKey(): Val N  = " + v.PublicKey.N.String()}s.RUnlock()return keyPrivateKey}在示例運(yùn)行中打印了哪些內(nèi)容?KEYINSTRUCT <nil>WHOLEMAPINSTRUCT map[0xc00021e000:0xc0000644e0]GetServerPrivateKey(): Recv N = 284429934903843367309<cut>GetServerPrivateKey(): Key N  = 284429934903843367309<cut>GetServerPrivateKey(): Val N  = 238865868438483289364<cut>當(dāng)我嘗試訪問返回的私鑰時(shí),最終結(jié)果當(dāng)然是:panic: runtime error: invalid memory address or nil pointer dereference[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x53ce07]
查看完整描述

1 回答

?
弒天下

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超8個(gè)贊

正如 blackgreen 所暗示的那樣,這可能是因?yàn)槟诘貓D中存儲(chǔ)了一個(gè)指針,而地圖中的公鑰在語義上是等效的,但不是索引。==

你沒有說你如何獲取函數(shù)的參數(shù),但假設(shè)這是在某種服務(wù)器上,其中私鑰是從線路或文件中解析的,你將獲得一個(gè)新分配的對(duì)象。這將出現(xiàn)在地圖中引用的內(nèi)存中的其他位置,因此即使模量和指數(shù)相同,指針也會(huì)有所不同。該類型具有可用于比較的 Equal 方法,因?yàn)榇朔椒ú黄鹱饔谩?code>==

有兩種簡單的方法可以獲得我懷疑你想要的行為:

  1. 使用切片并循環(huán)訪問,調(diào)用 。Equal(keyClientPubkey) 在每個(gè),而不是一個(gè)映射。只要您擁有的公鑰少于數(shù)百個(gè),這可能就可以了。(基準(zhǔn)測試可以告訴您環(huán)境中的確切斷點(diǎn))

  2. 創(chuàng)建一個(gè)幫助器函數(shù),該函數(shù)采用 a 并返回可用作鍵的可比較內(nèi)容(例如字符串)。一個(gè)簡單的版本是類似于 .使用它,您可以基于字符串表示形式存儲(chǔ)和檢索公鑰。toMapKey*rsa.PublicKeyreturn fmt.Sprintf("n=%x|e=%x", pk.N, pk.E)

注意:如果這是安全敏感代碼路徑(例如,如果對(duì)手可以隨意觸發(fā)它),我不建議使用上述任何一種方法,因?yàn)槟赡軙?huì)泄露計(jì)時(shí)信息。如果是這種情況,請(qǐng)向安全專家尋求幫助,:)。如果你只是在啟動(dòng)期間這樣做,那可能沒問題。


查看完整回答
反對(duì) 回復(fù) 2022-08-24
  • 1 回答
  • 0 關(guān)注
  • 161 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)