错误日志:使用AES解密出现undefined,但不报错。

今天在写使用AES加密解密时出现了一个很郁闷的问题,找了很久才找到原因所在。特意在这里记录一下。
下面是错误的具体示例:
在使用AES在后台对前端传过来的参数进行解密时,使用AES工具类的AESUtils.decr();方法并将解密过后的内容进行打印,结果出现undefined。
错误日志:使用AES解密出现undefined,但不报错。错误日志:使用AES解密出现undefined,但不报错。
而且我在前端对传过来的password加密之后alert()了一下,发现的确有加密之后的内容,也就是说,看起来似乎值已经传过来了
错误日志:使用AES解密出现undefined,但不报错。
检查了后端代码之后,终于找到报出undefined的具体代码
错误日志:使用AES解密出现undefined,但不报错。这时我以为是lang3包导入出错,因此重新导入了一次,然而还是无法解决问题,然而我将mes的长度打印出来,显示的结果mes是有长度的,也即是说mes其实是有值存在。
我不得不开始怀疑是不是new String()出现了问题,翻了一遍API没有找到理想的答案。

最后,在另一次返回前端修改代码的时候,我终于发现问题所在
错误日志:使用AES解密出现undefined,但不报错。
原来是我利用id选择器进行取值的时候没有加“#”。也就是说其实password并没有取到值。
但为什么还是能够加密呢?
因此我猜测AES不仅会对有值的数据进行加密,同时还会对空串进行加密,然后我又试了一下
错误日志:使用AES解密出现undefined,但不报错。
错误日志:使用AES解密出现undefined,但不报错。
果然加密了!这样也就找到了问题所在。

总结:AES不仅会对具体的值加密,而且也会对空串进行加密。因此在解密时它解密出来实际上也是一个空串,但为什么会报出undefined,这就涉及到AES更深层次的底层原理代码之中了。