Re: [問題] 使用JAVA API寫AES加密器的問題

看板java作者 (study)時間13年前 (2012/12/10 03:00), 編輯推噓2(201)
留言3則, 1人參與, 最新討論串3/3 (看更多)
: 我試過 byte[] key = 字串.getBytes(); 這方法,不過好像不對,變成只要輸入 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ key陣列中儲存的會是每個字元透過預設字元集轉換後的結果 假設預設字元集為MS950 byte[] key = "00000001".getBytes() ,會返回長度為8的byte array key[0]~[6]均是48 // ASCII value 48代表字元0 key[7]是49 而你想要的結果是 byte[] key = "00000001".getXXX() ,返回長度為1的byte array 且key[0]的值要是1 做法上可先將 字串 拆開為每8個字元一組,每一組代表一個8bits String 再將8bits String轉換為byte 具體實作如下: String keyString = "10000000"; String[] byteStrings = new String[keyString.length() / 8]; byte[] key = new byte[byteStrings.length]; int curpos; final int bitsPerByte = 8; for(int i = 0; i < byteStrings.length; i++) { curpos = i * 8; byteStrings[i] = keyString.substring(curpos, curpos + bitsPerByte); } for(int i = 0; i < byteStrings.length; i++) { /* java中byte是以signed two's complement來儲存 故需透過Integer.parseInt將8bits String轉換為int, 再把int轉為byte 直接用Byte.parseByte, 會導致值超出byte可以表示的範圍(-128~127) 如:10000001(binary) = 129(decimal) 補充:int 轉 byte 129(decimal)以int存在記憶體中會是00000...10000001 (共32 bits) 轉成byte時會直接截掉int的前三個bytes, 變成10000001 (8 b1ts) */ byte eachByte = (byte)Integer.parseInt(byteStrings[i], 2); key[i] = eachByte; } 另外也可以用bitwise的方式來做~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.193.183.7

12/10 22:00, , 1F
可以了耶 不過bitsPerByte好像是7
12/10 22:00, 1F

12/10 22:02, , 2F
eachByte 是不是多餘的@@ 感謝您的大力協助
12/10 22:02, 2F

12/11 03:40, , 3F
懂了 bitsPerByte是8 @@
12/11 03:40, 3F
文章代碼(AID): #1GnD_beo (java)
文章代碼(AID): #1GnD_beo (java)