Re: [問題] 使用JAVA API寫AES加密器的問題
: 我試過 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
12/10 22:00, 1F
→
12/10 22:02, , 2F
12/10 22:02, 2F
推
12/11 03:40, , 3F
12/11 03:40, 3F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):