DES加密解密结果为何不一致? 为什么OPENSSL在C++/PHP下AES加密解密结果不一...

DES\u52a0\u5bc6\u5b57\u7b26\u4e32\u540e\u518d\u89e3\u5bc6\uff0c\u4e3a\u4ec0\u4e48\u7ed3\u679c\u4e0d\u4e00\u6837

char szOutput[512] = {0};for ( int i = 0; i < len; i++ ) { sprintf(szOutput + i * 2, "%.2x", (unsigned char)out[i]);}

//////Aes\u89e3\u5bc6//////\u6e90\u5b57\u7b26\u4e32///aes\u5bc6\u94a5\uff0c\u957f\u5ea6\u5fc5\u987b32\u4f4d///\u89e3\u5bc6\u540e\u7684\u5b57\u7b26\u4e32publicstaticstringDecryptAes(stringsource,stringkey){using(AesCryptoServiceProvideraesProvider=newAesCryptoServiceProvider()){aesProvider.Key=GetAesKey(key);aesProvider.Mode=CipherMode.ECB;aesProvider.Padding=PaddingMode.PKCS7;using(ICryptoTransformcryptoTransform=aesProvider.CreateDecryptor()){byte[]inputBuffers=Convert.FromBase64String(source);byte[]results=cryptoTransform.TransformFinalBlock(inputBuffers,0,inputBuffers.Length);aesProvider.Clear();returnEncoding.UTF8.GetString(results);}}}

这个问题主要涉及编码、输入格式、输出格式、加密模式这几个方面的问题,还有一些细节问题比如空格与回车。 首先是编码问题,在线的编码格式一般默认是UTF-8,因此如果网页编码不是UTF-8,则会导致加密的结果不一样。因为DES算法本质上是对二进制内容进行加密,同样的文字经过不同的编码映射成的二进制内容并不相同。 其次,是输入格式问题。一般在网页的输入是文本格式(Plain Text),但是许多教程为了方便理解,写的输入格式是16进制,比如 DES算法实例讲解 这篇文章里面主要用的是16进制格式作为讲解,对于许多在线工具,明文和密钥输入用的是文本格式。因此,在输入的时候一定要注意区分。 然后,是输出格式的问题。有些在线加密工具输出会自动进行Base64编码,这样结果和直接加密的结果完全不同。DES加密的密文是16进制格式的,无法一一对应成ASCII码。密文要么以16进制输出,要么输出一堆乱码,而Base64能将一个较长的16进制数组编码为一个字符串,方便处理。 最后,是加密模式的问题。DES本身采用的是ECB(电子密码本)模式,即将加密的数据分成若干组,每组的大小跟加密密钥长度相同,这样密文输出完全由明文和密钥决定。为了进一步加强安全性,有许多安全性扩展,就诞生了别的加密模式,比如加密块链模式CBC、加密反馈模式CFB等等。不同的模式加密结果也会完全不同。 在附带一点细节问题,即空格与回车的问题。尤其是在字符串处理的时候,有些字符串会带回车换行(0x0D 0x0A),这会造成最后一个64位字符块加密有些许差别。还有一些文本框自动(trigger)去除空格,就导致文本中的空格没有被计算在内,导致加密不同。



将明文分成n个64比特分组,如果明文长度不是64比特的倍数,则在明文末尾填充适当数目的规定符号。对明文组用给定的密钥分别进行加密,行密文C=(C0,C1,……,Cn-1)其中Ci=DES(K,xi),i=0,1,…..,n-1。第二种密文分组链接方式(CBC) 在CBC方式下,每个明文组xi在加密前与先一组密文按位模二加后,再送到DES加密,CBC方式克服了ECB方式报内组重的缺点,但由于明文组加密前与一组密文有关,因此前一组密文的错误会传播到下一组。 第三种密文反馈方式(CFB),可用于序列密码 明文X=(x0,x1,……,xn-1),其中xi由t个比特组成0 第四种输出反馈方式(OFB),可用于序列密码 与CFB唯一不同的是OFB是直接取DES输出的t个比特,而不是取密文的t个比特,其余都与CFB相同。但它取的是DES的输出,所以它克服了CFB的密文错误传播的缺点



  • 鍏充簬DES鍔犲瘑绠楁硶鍔犲瘑缁撴灉涓轰綍鏄贡鐮佸舰寮
    绛旓細涓鑸儏鍐典笅锛鍔犲瘑缁撴灉鍙互鐢ㄤ簩杩涘埗锛屽崄鍏繘鍒跺拰瀛楃涓夌褰㈠紡鍙嶆槧銆備綘鎵璇寸殑涔辩爜灏辨槸瀛楃杩欑褰㈠紡銆備綘鐨勬槑鏂囧簲璇ユ槸涓枃瀛楃鍚э紵浣犲彲浠ョ畝鍗曟兂璞′竴涓嬶紝涓涓枃瀛楁槸鐢变袱涓瓧绗︾粍鎴愮殑锛屽搴擜SCII鐮侊紝鍔犲瘑鍚庣敓鎴愭槑鏂囧悓鏍蜂篃鏄疉SCII鐮佽浆鍖栨垚瀛楃銆傚洜姝や袱涓瓧绗︽湁鍙兘鏋勬垚闈炰腑鏂囩殑鎯呭喌锛屼篃灏辨槸浣犳墍璇寸殑涔辩爜銆
  • DES鍔犲瘑杩囩▼鍜瑙e瘑杩囩▼鐨勫尯鍒
    绛旓細鏁版嵁鍔犲瘑鏍囧噯DES锛圖ata Encryption Standard锛夌畻娉曟槸涓涓垎缁勫姞瀵嗙畻娉曪紝涔熸槸涓涓绉扮畻娉曪紝鍔犲瘑鍜瑙e瘑浣跨敤鍚屼竴涓畻娉曪紝鍒╃敤浼犵粺鐨勬崲浣嶃佸紓鎴栥佺疆鎹㈢瓑鍔犲瘑鏂规硶銆侱ES鏄疘BM鍦ㄤ笂涓笘绾70骞翠唬寮鍙戠殑绠瀵嗛挜瀵圭О鍔犺В瀵嗙畻娉曘傚姞瀵嗚繃绋嬪拰瑙e瘑杩囩▼鐨勫尯鍒細鈥滄柟鍚戝拰杩囩▼鍒氬ソ鐩稿弽鈥濄備篃灏辨槸璇粹滆В瀵嗚繃绋嬫槸鍔犲瘑杩囩▼鐨勫弽杩囩▼...
  • 瀵圭О瀵嗙爜绠楁硶鐨鍔犲瘑鍜瑙e瘑瀵嗛挜涓嶇浉鍚
    绛旓細5銆佷袱鑰呮垚瀵瑰嚭鐜帮紝鍏挜鍔犲瘑鍙兘鐢ㄧ閽瑙e瘑锛岃岀閽ュ姞瀵嗕篃鍙兘鐢ㄥ叕閽ュ姞瀵嗐備袱鑰呬笉鍚岀殑鏄細鍏挜鏄叕寮鐨勶紝鍙互闅忔剰鎻愪緵缁欎换浣曚汉锛岃岀閽ュ繀椤讳繚瀵嗐傜壒鐐规槸淇濆瘑鎬уソ锛屼絾鏄姞瀵嗛熷害鎱傛瘮杈冨绉板姞瀵嗙畻娉曞拰鍏紑瀵嗛挜绠楁硶,鍒嗘瀽鍏跺紓鍚?1銆佸湪璁$畻鏈轰笓缃戠郴缁熶腑骞挎硾浣跨敤鐨勫绉板姞瀵嗙畻娉曟湁DES銆両DEA鍜孉ES銆傚叕寮瀵嗛挜绠楁硶闈...
  • C# DES鍔犲瘑鍚庡瓨鍌,瑙e瘑鍚庢樉绀洪棶棰樸
    绛旓細鍦ㄦ垜杩欓噷娴嬭瘯浣犵殑浠g爜鏄彲浠ョ殑锛屼笉杩囨垜鎶妎bject o = sr.ReadLine();鏀规垚浜唎bject o = sr.ReadToEnd();
  • DES鍔犲瘑闂
    绛旓細鍙︿竴涓郴缁熸槸鍥介檯鏁版嵁鍔犲瘑绠楁硶(IDEA),瀹冩瘮DES鐨勫姞瀵嗘уソ,鑰屼笖璁$畻鏈哄姛鑳戒篃涓嶉渶瑕侀偅涔堝己銆傚湪鏈潵锛屽畠鐨勫簲鐢ㄥ皢琚帹骞垮埌鍚勪釜棰嗗煙銆侷DEA鍔犲瘑鏍囧噯鐢盤GP(Pretty Good Privacy)绯荤粺浣跨敤锛孭GP鏄竴绉嶅彲浠ヤ负鏅氱數瀛愰偖浠剁敤鎴锋彁渚涘姞瀵嗐瑙e瘑鏂规鐨勫畨鍏ㄧ郴缁熴傚湪PGP绯荤粺涓紝浣跨敤IDEA锛堝垎缁勯暱搴128bit锛夈丷SA锛堢敤浜庢暟瀛...
  • iOS des 鍔犲瘑瑙e瘑 鏈夋垚鍔熺殑渚嬪瓙娌
    绛旓細搴旇鏄鍔犲瘑鏃剁殑濉厖瀛楄妭涓嶆纭紝鏈鍚庝竴涓潡涓嶅畬鏁淬傚簲璇ユ槸鍔犲瘑鏃剁殑濉厖瀛楄妭涓嶆纭紝鏈鍚庝竴涓潡涓嶅畬鏁淬
  • php鐨des鍔犲瘑鐢╦s瑙e瘑瑙i櫎涔辩爜,鍙戠幇2涓姞瀵嗗嚭鐨勪笢瑗夸笉涓鏍
    绛旓細JS鍔犲瘑鍜孭HP鍔犲瘑鏄笉鍚岀殑锛岃櫧鐒堕兘鏄痬d5鍔犲瘑锛屾墍浠ヤ綘涓嶈兘鐩存帴鍒ゆ柇js鍔犲瘑鍜孭HP鍔犲瘑鏄惁鐩哥瓑锛屾瘯绔熸槸涓ょ璇█锛岃涔堥兘鐢╦s鐨勫姞瀵嗭紝瑕佷箞閮芥槸PHP鐨
  • JAVA鍜.NET浣跨敤DES瀵圭О鍔犲瘑鐨勫尯鍒
    绛旓細JAVA鍜.NET鐨勭郴缁熺被搴撻噷閮芥湁灏佽DES瀵圭О鍔犲瘑鐨勫疄鐜版柟寮忥紝浣嗘槸瀵瑰鏆撮湶鐨勬帴鍙e嵈鍚勪笉鐩稿悓锛岀敋鑷虫湁鏃朵細璁╄嚜宸遍毦浠ヨВ鍐冲叾涓殑闂锛屾瘮濡侸AVA鍔犲瘑鍚庣殑缁撴灉鍦.NET涓В瀵嗕笉鍑烘潵绛夛紝鐢变簬鏈杩戦」鐩湁璺↗AVA鍜.NET鐨勫姞瑙e瘑锛岀粡杩囨垜鐨勫垎鏋愯皟璇曪紝缁堜簬璁╁畠浠彲浠ヤ簰鐩鍔犲瘑瑙e瘑浜嗐DES鍔犲瘑 DES鏄竴绉嶅绉板姞瀵(Data ...
  • 鏄庢枃涓哄瓧绗︿覆涓庢槑鏂囦负鍗佸叚杩涘埗des缁撴灉涓嶅悓鏄粈涔堝師鍥?
    绛旓細浣犲ソ锛屼綘鐨勯偅涓叉暟瀛楃敤16杩涘埗鍜屽瓧绗︿覆鐨勬椂鍊欏des缂栫爜鍣ㄦ槸涓嶄竴鏍风殑杈撳叆锛屾瘮濡16杩涘埗b鏄10杩涘埗鐨11锛岀劧鍚庝綔涓哄皬鍐欏瓧绗︽槸10杩涘埗鐨98銆
  • C# des 瑙e瘑闂,缁撴灉涓㈠け,瑙e瘑鍚庡彧鍓╃涓涓瓧绗
    绛旓細浣犲姞瑙e瘑閮芥槸鐢ㄥ悓1涓瘑閽ュ悧锛熷缓璁綘鍗曟璋冭瘯锛屼竴鑸潵璇磋繖浜涢兘鏄潬瀵嗛挜鍔犺В瀵嗭紝濡傛灉鏄浉鍚岀殑璇濆簲璇ユ槸鍙互鐨勩備篃鏈夊彲鑳芥槸鍦ㄩ偅鍒ゆ柇涓簄ull鐒跺悗涓㈠け浜嗭紝寤鸿鍗曟涓琛屼竴琛岀湅
  • 扩展阅读:一键解密工具 ... base64加密解密 ... des在线加密解密工具 ... des加密算法是非对称加密 ... 加密通道网址获取 ... dns加密解密流程图 ... 文件名绿色如何解密 ... aes加密解密网页版 ... des算法的加密和解密过程 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网