首页 > 编程知识 正文

c代表什么,北京奔驰c200

时间:2023-05-05 12:45:36 阅读:29204 作者:2622

我最近在做物品的网络相关的项目。 数据的推送是用AES加密的,但在网上找的资料一个也不能使用。 既不是错误也不是乱码。 经过几个小时的修改和修改终于成功了。 在这里记录。 我向面临类似问题的朋友求助。

1、必须明确AES算法的模式。 这些会被写在开发文档里。 这很重要!

AES算法有五种模式,这里不列举。 本论文采用CBC模式,解码代码如下所示。

///summary ///AES算法解密(CBC模式) base64,然后解密明文//summary//param name=' decryptstr '密文/param ///returns明文/returnspublicstaticstringaesdecryptor _ base64 (stringdecryptstr,string key (try { byte [ ]密钥阵列=eny ) byte [ ] decrypt array=convert.from base64 string (decryptstr ); rijndaelmanagedrdel=newrijndaelmanaged (; rDel.Key=keyArray; rDel.Mode=CipherMode.CBC; rDel.Padding=PaddingMode.PKCS7; rDel.IV=new byte[16]; icryptotransformctransform=rdel.create decryptor (; byte [ ] result=ctransform.transformfinalblock (decrypt array,0,decryptArray.Length ); return encoding.utf8.getstring (result ); }catch(exceptionex ) { return null; } privatestaticbyte [ ] encode key [ string password ] { byte [ ] result=new byte [ 16 ]; for(intI=0; i 16; I ) { result[i]=0; } byte [ ] passbyte=encoding.utf8.getbytes (password ); for(intI=0; i passByte.Length; I ) if(I=16 ) { break; } result[i]=passByte[i]; }返回结果; }这里使用了Base64解码后进行了AES解码。 不需要Base64解码的朋友记得修改了byte [ ] decrypt array=convert.from base64 string (decryptstr )。 此行。

2、关于RijndaelManaged类的参数设置。

Key是密钥,转换为Byte数组的长度必须为16,因此上述的encodeKey方法是用小于16位来补充0,实现超过16位取前16位的功能。

Mode是AES算法的模式,如果模式选择不正确,会乱码或直接报告错误。 一开始我不知道是否选择这个,但是我决定在ECB模式下解密CBC模式的密文,然后直接报告错误。 到此为止,我不得不说,在那个漏洞百出的物联网平台开发文档中,并没有写下要选择什么模式。 还没有C#的Demo。 最后,看到Java的Demo中有CBC三个字,我想试试。 哦,真的。

Padding是在密文位数不足时补充的文字形式,也是查看开发文档。 (我同样在Java的Demo上摔倒,哭了) ) ) ) )。

属性真的是孔之一。 在网上找很多资料也没有设置这个IV。 我也没有设置。 但是,解密结果前面总是有16位的乱码。 乱码一直在变,一直很不可思议。 然后,无可避免地添加了该属性,并给出了16位空字节数组。 多么好啊。 所以,我就这样和空排列战斗了两个小时。

3、解密程序执行结果:

上面是加密的内容,下面是对enc_msg字段进行解密的结果。

因为没有使用加密的代码,所以没有写。 加密所需的朋友请参考其他人的文档。 需要注意的是,上述参数在加密解密时是匹配的。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。