亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

AES 128 CFB、Java/BouncyCastle 與 Ruby/OpenSSL

AES 128 CFB、Java/BouncyCastle 與 Ruby/OpenSSL

陪伴而非守候 2021-09-12 16:20:55
我正在嘗試將來自 BouncyCastle 的 Java 實現的 AES 加密與 Ruby 相匹配。不知何故,即使使用相同的密鑰、IV 和有效載荷,我似乎無法在兩種語言中獲得相同的結果。在這個例子中,我使用 ruby 來生成密鑰和 IV,然后在 java 代碼中重用這個密鑰和 IV。任何人都可以發現有什么問題嗎?這是紅寶石代碼:require 'openssl'cipher = OpenSSL::Cipher::AES.new(128, "CFB")cipher.encryptpayload = "\x01\x02\x03\x04".bputs "key"puts cipher.random_key.unpack("H*")puts "iv"puts cipher.random_iv.unpack("H*")puts (cipher.update(payload) + cipher.final).unpack("H*")它的輸出:key19900205760f9b9696b34cacdbf0189divb549f3bb806c4bce9c949f61185f2c38303dc6e6和(不是這樣)對應的java代碼byte[] key = hexStringToByteArray("19900205760f9b9696b34cacdbf0189d");byte[] iv = hexStringToByteArray("b549f3bb806c4bce9c949f61185f2c38");byte[] payload = new byte[] { 1, 2, 3, 4};AESEngine aesEngine = new AESEngine();CFBBlockCipher cipher = new CFBBlockCipher(aesEngine, 8);ParametersWithIV params = new ParametersWithIV(new KeyParameter(key), iv);BufferedBlockCipher bbc = new BufferedBlockCipher(cipher);bbc.init(true, params);byte[] output = new byte[payload.length];int result = bbc.processBytes(payload, 0, payload.length, output, 0);bbc.doFinal(output, result);System.out.println("With BC: " + bytesToHex(output));java的結果是305F1C09對于任何有效負載,第一個字節始終與兩種實現相同,但其余部分則有所不同??赡苁敲艽a反饋循環的工作方式不同嗎?編輯:正如詹姆斯在評論中指出的,這是塊大小的問題。在上面的代碼中,ruby 似乎使用默認的 128 位塊大小,而 java 代碼使用 8 位塊。在我的情況下,我必須將 ruby 代碼與 java 匹配,所以我現在需要找到一種方法來使用 8 位塊大小和 ruby。我很干。這里有什么想法嗎?
查看完整描述

1 回答

  • 1 回答
  • 0 關注
  • 330 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號