今天蛮沮丧的,在和别人对接的时候aes加解密的时候踩了坑。今天有个同事请假了,所以本来他和别人对接的活,老大给了我,然后我就正式踏上了战战兢兢的对接之路。
1.一开始的时候对面先是问用的啥加密方法。这个我记得当时做的时候我就在旁边还问我了的,AES。顺利答出。
2.然后对面又问要key和偏移量,key我知道,偏移量是什么鬼,然后去百度了一下,一个叫IV的东西,对加密有点了解脑子里大概知道是做啥用的了,去找了一下还真有,key,iv都发过去了。还算顺利
到这里应该都结束了。哪曾想对面拿到这两个东西,解密还是解不了,解密返回的是空。
然后我就开始找原因
①我先是试了一下我本地加密解密,ok没有问题
②我又试了一下在密文前面加空格然后解密,返回的是空,那是不是就是这个原因呢,发给对面让对面把空格去了试试,好还是不行
③然后就是半个多小时过去,对面看我久久不回,把解密的方法发给了我,我看了一下和我这边差别不大,唯一有差别的就是
对面的key是我发的字符串
,而我这边的key是生成的
有没有可能是两个不一样呢,我把两个都输出比较了一下都一样的没问题看起来都是字符串。这是我踩的第一个坑。
然后呢,不信自己的眼睛又用了一下key == key1 输出了一下true,也没问题呀。这是我踩的第二个坑。被两个坑给埋了。
最后问同事,同事试了一下也愣住了,然后我给他展示了一下我用key == key1是true ,他让我试试 key === key1,一输出false,好这个时候原因很明显了,我又用typeof key,输出了是object,好家伙。
至于key == key1为什么是true,我想大概是对象的toString方法,让他输出了和key1相等的字符串
最后最后我把对面晾了两个多小时,对面让我把生成密钥的盐值,密码短语,KEY_SIZE,ITERATION_COUNT都发给他,自己生成密钥去了。
虽然问题解决了,但是还是要探讨一下有密钥了,这个key到底应该怎么写。我的chat今天下午竟然罢工了,不然问一下应该很快就能解决(顺便吐槽一下国内的大模型真lj,根本比不了),目前还用不了,先记录一下,等能用了我再问问。