Java AES-128 ECB加密

Java AES-128 ECB加密,java,encryption,aes,Java,Encryption,Aes,我收到来自AT5(Atrack)unite的消息,该消息采用AES-128 ECB加密编码,这是十六进制的密钥(33333 8380000000000000000000000) 原始密钥位于字符串“3388”中 这是我收到的密码,但我把它转换成十六进制 每当我尝试解密邮件时,我都会遇到以下异常: 解密时出错:javax.crypto.IllegalBlockSizeException:使用填充密码解密时,输入长度必须是16的倍数 这是我的密码: orginalString ?U??

我收到来自AT5(Atrack)unite的消息,该消息采用AES-128 ECB加密编码,这是十六进制的密钥(
33333 8380000000000000000000000
) 原始密钥位于字符串“3388”中 这是我收到的密码,但我把它转换成十六进制

每当我尝试解密邮件时,我都会遇到以下异常:

解密时出错:javax.crypto.IllegalBlockSizeException:使用填充密码解密时,输入长度必须是16的倍数

这是我的密码:

    orginalString 

 ?U??????}MgD?R???`????
#?j????g:N???@???$=???r?u?>~??Qh,?N?????3?8:?-E??;?b<J??I?v{?'o?m[?|?CY?n????K????>?ã??<?,????  ??f?'???}&?}?7r%??93??!u?0D?3Ig|??%'????*??`?Y^?M?4J?I?>?tIu???;?RR;2??{nrl??us
?R?F?oi????



String strToDecrypt = "E255898281B7C0B67D4D6744DB52FA1789F760B99B86A40A1F238B6ABCC690C1C9673A4E07EA03F79B40B2ACC8243DD098F4B10E72BA75CE3E7EE50F935168042CC74EA2F4BBE3D833F4383AE02D45C0119C3BC8623C4AD5189249FAB0BB767BA2276FB56D5BF27CE017435901DD8F6EC9DECD05B74BF51A99B1933E89C3A3AD06CA893CE72CDDEAE5F509E2D01B66A02717AADD0C917D26BA7DB1377225CCF23933E5F92175BD3044C63349677CEBC6251B27BE1FC9FD7FC32A0785F36019C2595E1EE783B64DB2344A14CE49C63EAB74174975FCE1C53BD95252113B0332CBD7A37B6E726CCFF675730DB052B14605E36F69AF11E8F3D2002D8BABEFFF508187E4C176329A3ABE08CF2B9A9F4812CF4084BACE87AD116F49C2ACD449767E758CE9184C60268AE3AAEADA052C91BF16241682E333671AC209D5BDC34CFD2B2D0C8D6D795D36A5FBD707FB56F71B3740BA86B1CEAC6E784E8E2B999CC6C9260A13F697A115C80F29C5AA38E95964731073CB051BB8A201EBAE6443A057AA69CFF41C9A593F88E2D6A712107EABCDE7042134F818268BF31896072C1B399B878BACCECC096F79A8D1835C2766EA639341E4AB22820D5AAD0F202BC896BD6C6F4D1FB1873C5BE06278D11E67F577D0120E054971088E7DB7E3A8139B20C6E22B86205BC0F4778A1DA0D6E50416FCE55DBC576A9F907FC706148204CA3C79993A4F37756427871C12EB379B4BFA0A518FFCA2BC698B1CA68AC9B3548B241C12669CEFAC9C8ECDB7B5A8149B";
secretKey = new SecretKeySpec("33333838000000000000000000000000".getBytes("UTF-8"), "AES");

Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] cipherResult = cipher.doFinal(Base64.decodeBase64(strToDecrypt));
orginalString
U?MgD?R?????

#j?g:N?@?$=?r?u?>~?Qh,N?3?8:?E??;?b您的
strotdecrypt
似乎是十六进制编码的,而不是base64编码的。。因此,您需要在解密之前对其进行十六进制解码,而不是base64解码。但实际上,如果对十六进制进行解码,则加密数据的大小也将无效。十六进制字符串是1200个十六进制字符=600字节=37.5个16字节的AES块。。您的数据似乎有问题


此外,您的密钥也是十六进制编码的,因此需要对其进行十六进制解码。。不仅仅是一个
getBytes(…)

共享strToDecrypt如何生成的代码。decodeBase64(strToDecrypt)将产生大小为900的字节数组。900除以16后剩下4。它是从硬件设备生成的,我们只控制键“3388”,因为字符串包含基数16(十六进制)中允许的字符,并不意味着它必须进行十六进制解码(你自己证明了,如果它也应该进行解码,则没有任何意义)密钥长度为32字节也没有问题(密钥字节中也没有包含十六进制字符),所以我们可以直接调用getbytes。@kamyarhaqqani:1)因为它被认为是密码,有几百个字节长,是的,它基本上证明了它是十六进制编码的;2) 既然他说他使用的是AES128,那么,是的,密钥也是十六进制编码的,但是很多十六进制编码的密码都是非随机的,无论如何都不可能是加密的。@kamyarhaqqani我写道,它似乎是十六进制的。。我选择这个措辞是为了反驳这种迂腐的讨论。至于密钥,OP explicit在问题中声称它是十六进制的,该十六进制密钥的长度与AES-128所需的128位密钥长度完全匹配-问题中也有说明。您对密钥的看法是正确的,并且这一讨论是迂腐的。通过说“在解密之前您需要对其进行十六进制解码”,实际上您得出的结论是,任何包含基数为16的允许字符(并且“似乎”是十六进制)的字符串始终是十六进制编码的字符串,而不是!对于密钥,他们使用字符串“3388”,我将其转换为十六进制以获得其16个字节