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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 golang 中匹配 phpseclib1 Rijndael.php CBC AES 加密?

如何在 golang 中匹配 phpseclib1 Rijndael.php CBC AES 加密?

Go
慕桂英3389331 2022-03-07 16:30:44
我像這樣加密:  plaintextstr := "0000000000000thankustackoverflow"  plaintext := []byte(plaintextstr)  key := []byte("abcdefghijklmnop")  block, _ := aes.NewCipher(key)  ciphertext := make([]byte, aes.BlockSize+len(plaintext))  iv := ciphertext[:aes.BlockSize]  mode := cipher.NewCBCEncrypter(block, iv)  mode.CryptBlocks(ciphertext[aes.BlockSize:], plaintext)  fmt.Printf("%x\n", ciphertext)輸出是:000000000000000000000000000000000d77aa6646bb541808ed23c88d4b06d30f42b01d6e806a02b29086bc82892334f但是用 PHP 編寫的此代碼的另一個版本的輸出是:d77aa6646bb541808ed23c88d4b06d30f42b01d6e806a02b29086bc82892334fbf21ea861abbc3d72e44731978bb76c2請注意,00000000000000000000000000000000 是末尾缺失數(shù)據(jù)的確切長度。它是 32,即原始純文本字符串的大小。知道如何在 golang 中左移所有內(nèi)容并獲取丟失的數(shù)據(jù)嗎?PHP:<?phpinclude('Crypt/AES.php');$aes = new Crypt_AES();$aes->setKey('abcdefghijklmnop');echo bin2hex($aes->encrypt("0000000000000thankustackoverflow"));https://github.com/andrewarrow/phpseclib1/blob/master/Crypt/AES.php https://github.com/andrewarrow/phpseclib1/blob/master/Crypt/Rijndael.php調(diào)試php輸出:00000000000000000000000000000000 <--- IV30303030303030303030303030746861 block 0d77aa6646bb541808ed23c88d4b06d30 crypted 06e6b75737461636b6f766572666c6f77 block 16f42b01d6e806a02b29086bc82892334f crypted 1610101010101010101010101010101010 block 32bf21ea861abbc3d72e44731978bb76c2 crypted 32
查看完整描述

2 回答

?
米脂

TA貢獻1836條經(jīng)驗 獲得超3個贊

這不是一個移位問題,它是一個輸出緩沖區(qū)大小問題,因為 iv 是加密數(shù)據(jù)的前綴。

IV 是一個空塊 (0x00),因為它從未設(shè)置為值。它被添加到加密數(shù)據(jù)之前,這很常見。需要添加一個填充塊,因為輸入數(shù)據(jù)是塊大小的精確倍數(shù)。

這個輸出緩沖區(qū)需要是 iv 的大小 + 數(shù)據(jù)的大小 + 填充塊的大小。(16 + 32 + 16 = 64)

向輸出緩沖區(qū)添加另一個塊大?。?/p>

ciphertext := make([]byte, aes.BlockSize + len(plaintext) + aes.BlockSize)


查看完整回答
反對 回復(fù) 2022-03-07
?
忽然笑

TA貢獻1806條經(jīng)驗 獲得超5個贊

PHP 版本正在編碼一個額外的 16 字節(jié)的“空”字符串,該字符串用 16 秒填充!


  p1 := "0000000000000tha"

  p2 := "nkustackoverflow"


  p1b := []byte(p1)

  p2b := []byte(p2)

  p3b, _ := hex.DecodeString("10101010101010101010101010101010")

  fmt.Println(p3b)


  key := []byte("abcdefghijklmnop")

  block, _ := aes.NewCipher(key)

  ciphertext := make([]byte, aes.BlockSize+16)

  iv := ciphertext[:aes.BlockSize]

  mode := cipher.NewCBCEncrypter(block, iv)


  i := 0

  for {

    if i == 0 {

      mode.CryptBlocks(ciphertext[aes.BlockSize:], p1b)

    } else if i == 1 {

      mode.CryptBlocks(ciphertext[aes.BlockSize:], p2b)

    } else if i == 2 {

      mode.CryptBlocks(ciphertext[aes.BlockSize:], p3b)

    }

    fmt.Printf("%x\n", ciphertext[16:])

    i += 1

    if i > 2 {

      break

    }

  }

這段代碼identical在 golang 中打印 php 的內(nèi)容。


查看完整回答
反對 回復(fù) 2022-03-07
  • 2 回答
  • 0 關(guān)注
  • 186 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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