测试代码:
AES_obj = AES:new();
local i , buf , buf2 , bComplete;
-- 使用 Crypto++ Library 8.2 的部分用例
AES_Key = {0x2B , 0x7E , 0x15 , 0x16 , 0x28 , 0xAE , 0xD2 , 0xA6 , 0xAB , 0xF7 , 0x15 , 0x88 , 0x09 , 0xCF , 0x4F , 0x3C};
AES_EData = {0x6B , 0xC1 , 0xBE , 0xE2 , 0x2E , 0x40 , 0x9F , 0x96 , 0xE9 , 0x3D , 0x7E , 0x11 , 0x73 , 0x93 , 0x17 , 0x2A , 0xAE , 0x2D , 0x8A , 0x57 , 0x1E , 0x03 , 0xAC , 0x9C , 0x9E , 0xB7 , 0x6F , 0xAC , 0x45 , 0xAF , 0x8E , 0x51 , 0x30 , 0xC8 , 0x1C , 0x46 , 0xA3 , 0x5C , 0xE4 , 0x11 , 0xE5 , 0xFB , 0xC1 , 0x19 , 0x1A , 0x0A , 0x52 , 0xEF , 0xF6 , 0x9F , 0x24 , 0x45 , 0xDF , 0x4F , 0x9B , 0x17 , 0xAD , 0x2B , 0x41 , 0x7B , 0xE6 , 0x6C , 0x37 , 0x10};
AES_DData = {0x3A , 0xD7 , 0x7B , 0xB4 , 0x0D , 0x7A , 0x36 , 0x60 , 0xA8 , 0x9E , 0xCA , 0xF3 , 0x24 , 0x66 , 0xEF , 0x97 , 0xF5 , 0xD3 , 0xD5 , 0x85 , 0x03 , 0xB9 , 0x69 , 0x9D , 0xE7 , 0x85 , 0x89 , 0x5A , 0x96 , 0xFD , 0xBA , 0xAF , 0x43 , 0xB1 , 0xCD , 0x7F , 0x59 , 0x8E , 0xCE , 0x23 , 0x88 , 0x1B , 0x00 , 0xE3 , 0xED , 0x03 , 0x06 , 0x88 , 0x7B , 0x0C , 0x78 , 0x5E , 0x27 , 0xE8 , 0xAD , 0x3F , 0x82 , 0x23 , 0x20 , 0x71 , 0x04 , 0x72 , 0x5D , 0xD4};
Msg("Test original:");
AES_obj:set_key(AES_Key , 16);
buf = {};
for i = 1 , 64 , 16 do
AES_obj:encrypt(AES_EData , i , buf , i);
end
-- Msg(string.format("dl:%d bl:%d" , #AES_EData , #buf));
bComplete = true;
for i = 1 , 64 do
if AES_DData[i] ~= buf[i] then
bComplete = false;
Msg(string.format("encrypt err: %d , %02x , %02x" , i , AES_DData[i] , buf[i]));
break;
end
end
if bComplete then
Msg("encrypt complet");
else
Msg("encrypt Data:" .. sys.Convert(buf , T_Convert.HexText));
end
buf2 = {};
for i = 1 , 64 , 16 do
AES_obj:decrypt(AES_DData , i , buf2 , i);
end
bComplete = true;
for i = 1 , 64 do
if AES_EData[i] ~= buf2[i] then
bComplete = false;
Msg(string.format("decrypt err: %d , %02x , %02x" , i , AES_EData[i] , buf2[i]));
break;
end
end
if bComplete then
Msg("decrypt complet");
else
Msg("decrypt Data:" .. sys.Convert(buf2 , T_Convert.HexText));
end
Msg("Test ecb:");
buf = AES_obj:ecb_EncryptDecrypt(string.char(table.unpack(AES_EData)) , string.char(table.unpack(AES_Key)) , true);
if buf == string.char(table.unpack(AES_DData)) then
Msg("encrypt complet");
else
Msg("encrypt Data:" .. sys.Convert(buf , T_Convert.HexText));
end
buf2 = AES_obj:ecb_EncryptDecrypt(buf , string.char(table.unpack(AES_Key)) , false);
if buf2 == string.char(table.unpack(AES_EData)) then
Msg("decrypt complet");
else
Msg("decrypt Data:" .. sys.Convert(buf2 , T_Convert.HexText));
end
-- 默认 IV:1
AES_IV = {0x01 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00};
Msg("Test cbc:");
buf = AES_obj:cbc_EncryptDecrypt(string.char(table.unpack(AES_EData)) , string.char(table.unpack(AES_Key)) , string.char(table.unpack(AES_IV)) , true);
buf2 = AES_obj:cbc_EncryptDecrypt(buf , string.char(table.unpack(AES_Key)) , string.char(table.unpack(AES_IV)) , false);
if buf2 == string.char(table.unpack(AES_EData)) then
Msg("complet");
else
Msg("Data:" .. sys.Convert(buf2 , T_Convert.HexText));
end
AES_IV = {0x00 , 0x01 , 0x02 , 0x03 , 0x04 , 0x05 , 0x06 , 0x07 , 0x08 , 0x09 , 0x0A , 0x0B , 0x0C , 0x0D , 0x0E , 0x0F};
AES_Key = {0x2B , 0x7E , 0x15 , 0x16 , 0x28 , 0xAE , 0xD2 , 0xA6 , 0xAB , 0xF7 , 0x15 , 0x88 , 0x09 , 0xCF , 0x4F , 0x3C};
AES_EData = {0x6B , 0xC1 , 0xBE , 0xE2 , 0x2E , 0x40 , 0x9F , 0x96 , 0xE9 , 0x3D , 0x7E , 0x11 , 0x73 , 0x93 , 0x17 , 0x2A , 0xAE , 0x2D , 0x8A , 0x57 , 0x1E , 0x03 , 0xAC , 0x9C , 0x9E , 0xB7 , 0x6F , 0xAC , 0x45 , 0xAF , 0x8E , 0x51 , 0x30 , 0xC8 , 0x1C , 0x46 , 0xA3 , 0x5C , 0xE4 , 0x11 , 0xE5 , 0xFB , 0xC1 , 0x19 , 0x1A , 0x0A , 0x52 , 0xEF , 0xF6 , 0x9F , 0x24 , 0x45 , 0xDF , 0x4F , 0x9B , 0x17 , 0xAD , 0x2B , 0x41 , 0x7B , 0xE6 , 0x6C , 0x37 , 0x10};
AES_DData = {0x76 , 0x49 , 0xAB , 0xAC , 0x81 , 0x19 , 0xB2 , 0x46 , 0xCE , 0xE9 , 0x8E , 0x9B , 0x12 , 0xE9 , 0x19 , 0x7D , 0x50 , 0x86 , 0xCB , 0x9B , 0x50 , 0x72 , 0x19 , 0xEE , 0x95 , 0xDB , 0x11 , 0x3A , 0x91 , 0x76 , 0x78 , 0xB2 , 0x73 , 0xBE , 0xD6 , 0xB8 , 0xE3 , 0xC1 , 0x74 , 0x3B , 0x71 , 0x16 , 0xE6 , 0x9E , 0x22 , 0x22 , 0x95 , 0x16 , 0x3F , 0xF1 , 0xCA , 0xA1 , 0x68 , 0x1F , 0xAC , 0x09 , 0x12 , 0x0E , 0xCA , 0x30 , 0x75 , 0x86 , 0xE1 , 0xA7};
Msg("Test cbc2:");
buf = AES_obj:cbc_EncryptDecrypt(string.char(table.unpack(AES_EData)) , string.char(table.unpack(AES_Key)) , string.char(table.unpack(AES_IV)) , true);
if buf == string.char(table.unpack(AES_DData)) then
Msg("encrypt complet");
else
Msg("encrypt Data:" .. sys.Convert(buf , T_Convert.HexText));
end
buf2 = AES_obj:cbc_EncryptDecrypt(buf , string.char(table.unpack(AES_Key)) , string.char(table.unpack(AES_IV)) , false);
if buf2 == string.char(table.unpack(AES_EData)) then
Msg("decrypt complet");
else
Msg("decrypt Data:" .. sys.Convert(buf2 , T_Convert.HexText));
end