详述图片base64加密的原理,告诉你什么是"/9j/"

在日常的生活中,我们肯定都经历过类似这样的场景:报名考试上传图片,网站要求的是上传的照片不能大于多少,而且要求是“.jpg”的格式。

于是你高高兴兴地把自己最漂亮的照片上传上去了,但是网站却提示你照片格式不正确,让你重新上传。这个时候内心不知道有多少疑惑涌上心头(其实是奔腾)我的照片明明就是“.jpg”结尾的,而且大小也符合规范,为啥就不行呢?

我们通常的会认为(Windows电脑情况下,Mac不知道,毕竟我没有图片)“.jpg”图片结尾的就一定是符合规范的“JPG”文件类型。其实一开始我也是这样认为的,直到前几天,我在对接项目的时候踩了一个大坑,很大的坑!

我对接的项目要求的是图片是“JPG”类型的文件,并且经过base64进行编码之后要以"/9j"开头的文件。于是我就把我电脑上保存的看似符合规范的图片上传上去了,结果就是一堆报错信息。于是我再次尝试,换一些其他的图片进行测试,发现有的就好使,有的就不好使。说实话,我的内心崩溃了!那种感觉你懂得图片

回到家之后我思来想去就是不知道为什么要求什么"/9j"开头的?我打开了百度,输入了关键词“/9j”之后,呵呵!我笑了,都是些什么?完全跟我的问题不着边!

什么玩意?这到底是什么玩意?竟然连强大的百度都没有给出结果!就这样,我搜索到了凌晨12点......

扛不住了,我就去睡觉了。但是躺在床上我辗转难眠,打开手机继续各种搜索着......突然!我看了一个关于电脑图片文件头信息解析的文章!一道灵光从我脑门上闪过。于是我起床,默默打开了电脑,打开了百度......

原来电脑在存储的时候是存储了图片的基本信息的,比如图片是什么类型的,图片的宽高等基本信息,这些个基本信息叫做图片头信息。好吧!原谅我的无知,曾经的我天真的以为是按照文件后缀名区分的呢。

我们应知道,图片在计算机中存储是一个一个的像素点,最底层也是二进制文件,所以需要文件头来保存文件信息。经查找资料,我找到如下对图片不同格式的文件头标识信息(16进制标识):

于是我在电脑上保存了一个为“.jpg”后缀结尾的图片,然后使用UE这个强大的工具打开,果然不出我所料,看看这个文件的内容信息。

不出意外的话,你肯定看不懂这些东西,因为这些是16进制文件。但是重要的我已经给你标注出来了,那就是“FF D8”。

在这里我给大家稍微简单科普下base64的编码规则:假如我们有个“hello”这样的关键字进行base64编码,需要先把“hello”转换成二进制,也就是"110100011001011101100110 11001101111"。我这里给了一个ASCII表,这里对应的是10进制的,需要把十进制转化成2进制的。

关于base64 有个规定就是,一个字符转换之后如果位数不为8位,需要在高位补0,然后再6位截取,最后不够6位的,低位补0。然后把分割后的2进制转换成10进制并对照base64编码表进行解析。那么上述的“hello”的解析过程就如下:

所以“hello”base64编码之后的最终结果就是“aGVsbG8=”。也许你会疑惑,为什么多了个“=” 这个其实是base64的规定,编码完毕之后自动添加一个或两个“=”。

那么再回到“FF D8”,jpg文件的标识头,他经过base64转码之后是什么呢?

谢天谢地,可算搞明白为什么是“/9j”开头的了。其实还有另外一种方式快速查看是不是jpg格式文件。我们可以使用记事本的方式打开一个jpg文件。

打开之后,你肯定还是看不懂这些东西,但是重要的我已经给你标注出来了,那就是“JFIF”,这个是一个很重要的标识,所谓的“JFIF”就是"JPEG File Interchonge Format"即JPEG文件交换格式。

为了还原我之前明明是“.jpg”后缀的文件,但是识别失败的问题。我们把一个格式为“.png”图片,通过改后缀名的方式,改成“.jpg”。然后也用记事本打开查看文件的内容。

可以看到,并不是“JFIF”,因此这并不是一个jpg文件,所以上传无法识别。

带着问题去睡觉,果然是睡不着的!通过这次的经历,我知道了base64的编码原理,明白了文件在电脑中存储并不是靠简简单单的后缀名来区分的,而是有文件头信息的。文件到底是一个什么文件,还是要靠文件头信息来决定的。所以,你以后的程序判断文件类型千万不要仅仅判断后缀名就完事了哦!



  • 浠涔堟槸BASE64缂栫爜?
    绛旓細涓嬮潰绠鍗曚粙缁Base64绠楁硶鐨勫師鐞锛岀敱浜庝唬鐮佸お闀垮氨涓嶅湪姝よ创鍑 Base64瑕佹眰鎶婃瘡涓変釜8Bit鐨勫瓧鑺傝浆鎹负鍥涗釜6Bit鐨勫瓧鑺傦紙3*8 = 4*6 = 24锛夛紝鐒跺悗鎶6Bit鍐嶆坊涓や綅楂樹綅0锛岀粍鎴愬洓涓8Bit鐨勫瓧鑺傦紝涔熷氨鏄锛岃浆鎹㈠悗鐨勫瓧绗︿覆鐞嗚涓婂皢瑕佹瘮鍘熸潵鐨勯暱1/3銆傝浆鎹㈠悗锛屾垜浠敤涓涓爜琛ㄦ潵寰楀埌鎴戜滑鎯宠鐨勫瓧绗︿覆锛堜篃灏...
  • base64鐨勫師鐞
    绛旓細鑷姩灏辫ˉ涓や釜楂樹綅0浜嗘墍鏈夋湁浜 楂樹綅琛0绉戝璁$畻鍣ㄨ緭鍏 00011100 00110011 00000100 00110011寰楀埌 28 51 4 51鏌ュ涓嬬収琛 c z E z鍏堜互鈥滆繀闆蜂笅杞解濅负渚嬶細 寰堝涓嬭浇绫荤綉绔欓兘鎻愪緵鈥滆繀闆蜂笅杞解濈殑閾炬帴锛屽叾鍦板潃閫氬父鏄姞瀵嗙殑杩呴浄涓撶敤涓嬭浇鍦板潃銆傚叾瀹炶繀闆风殑鈥滀笓鐢ㄥ湴鍧鈥濅篃鏄敤Base64鍔犲瘑鐨锛屽叾杩囩▼濡備笅锛氫竴銆佸湪...
  • 寮鍙戜腑甯歌鐨鍔犲瘑鏂瑰紡鍙婂簲鐢
    绛旓細( 65瀛楃:A~Z a~z 0~9 + / = )缂栫爜鍚庣殑鏁版嵁~=缂栫爜鍓嶆暟鎹殑4/3,浼氬ぇ1/3宸﹀彸(鍥剧墖杞寲涓base64鏍煎紡浼氭瘮鍘熷浘澶т竴浜)銆 搴旂敤:Base64缂栫爜鏄粠浜岃繘鍒跺埌瀛楃鐨勮繃绋,鍙敤浜庡湪 HTTP 鐜涓嬩紶閫掕緝闀跨殑鏍囪瘑淇℃伅銆備緥濡,鍦↗ava Persistence绯荤粺Hibernate涓,灏遍噰鐢ㄤ簡Base64鏉ュ皢涓涓緝闀跨殑鍞竴 鏍囪瘑绗 (涓鑸负128...
  • (浜)base64缂栫爜鐨勫墠涓栦粖鐢
    绛旓細涓嶈繃杩欐牱鏇存氮璐圭┖闂达紝骞朵笖涓嶆槗淇濆瓨銆傦紙3锛夊娑堟伅鍐呭杩涜绠鍗曚繚鎶わ紙闃插悰瀛愪笉闃插皬浜猴紝闃插琛屼笉闃插唴琛岋級锛屽氨涓嶈В閲婁簡銆    锛堝弬鑰冿細 https://blog.csdn.net/waf1314/article/details/5107400 锛 5.  BASE64 鐨勮鐢 BASE64涓嶈兘鐢ㄤ簬淇℃伅鍔犲瘑锛佸緢瀹规槗鐮磋В锛
  • 浠嬬粛涓鐐筳s鍔犲瘑鐨鏂规硶
    绛旓細浣犲彲浠ュ埌缃戜笂涓嬭浇涓嬮潰鎵鐢ㄧ殑js鏂囦欢銆1銆base64鍔犲瘑鍦ㄩ〉闈腑寮曞叆base64.js鏂囦欢锛岃皟鐢ㄦ柟娉曚负锛<script type="text/javascript" src="base64.js"></script><script type="text/javascript"> var b = new Base64(); var str = b.encode("admin:admin"); alert("base64 encode:" + ...
  • 姹夊瓧鍔犲瘑鍚庣殑瀛楃鏁颁細鏀瑰彉鍚
    绛旓細浼氱殑姹夊瓧鍔犲瘑涔嬪悗浼氭湁鏂扮殑瀛楃锛屽瓧绗︽暟鏄細闅忕潃鏀瑰彉鐨勩base64鍔犲瘑鍘熺悊锛氣憼灏嗘瘡涓変釜瀛楄妭浣滀负涓缁勶紝涓鍏辨槸24涓簩杩涘埗浣嶃傗憽灏嗚繖24涓簩杩涘埗浣嶅垎涓哄洓灏忕粍锛屾瘡涓皬缁勬湁6涓簩杩涘埗浣嶃傗憿鍦ㄦ瘡灏忕粍鍓嶉潰鍔犱袱涓00锛屾墿灞曟垚32涓簩杩涘埗浣嶏紝鍗冲洓涓瓧鑺傘傗懀鏍规嵁base64鍩虹琛紝寰楀埌鎵╁睍鍚庣殑姣忎釜瀛楄妭鐨勫搴旂殑base64...
  • RSA銆丼HA銆丏ES銆丮D5銆BASE64鐨鍙嗘у垎鏋
    绛旓細瀵规暟鎹唴瀹硅繘琛岀紪鐮佺敤鏉ヤ紶杈擄紝铏界劧鏄彲閫嗙殑锛屼絾鏄畠鐨勭紪鐮佹柟寮忔槸鍏紑鐨勶紝鏃犳墍璋撳姞涓鍔犲瘑銆Base64鏄綉缁滀笂鏈甯歌鐨勭敤浜庝紶杈8Bit瀛楄妭鐮佺殑缂栫爜鏂瑰紡涔嬩竴锛孊ase64灏辨槸涓绉嶅熀浜64涓彲鎵撳嵃瀛楃鏉ヨ〃绀轰簩杩涘埗鏁版嵁鐨勬柟娉曘傚師鏂囨惉杩 https://blog.csdn.net/The_best_/article/details/109877405 ...
  • Base64缂栫爜
    绛旓細鐗圭偣 缁撴灉 鎵鏈夌殑鏁版嵁閮借兘琚紪鐮佷负骞跺彧鐢 65 涓瓧绗﹀氨鑳借〃绀虹殑 鏂囨湰鏂囦欢 銆 65瀛楃 瀵规枃浠惰繘琛宐ase64缂栫爜鍚庢枃浠舵暟鎹殑鍙樺寲 Base64鍔犲瘑鍘熷垯 锛氬ABC杩涜Base64缂栫爜杩囩▼ 娉細Base64瀛楃琛紝鍖呮嫭 澶у啓A-Z灏忓啓a-z鏁板瓧0-9 鍜 + 浠ュ強 / 銆備笅闈㈢湅涓涓婤ase64鐩稿叧鐨凙PI 杩欓噷杩樻湁涓や釜鏋氫妇锛屽垎鍒...
  • base64鍔犲瘑绠楁硶
    绛旓細Base64鍔犲瘑绠楁硶涓昏搴旂敤浜嶢SCII瀛楃闆嗕腑鐨勫瓧绗︿覆锛屽浜庝腑鏂囧瓧绗︿覆鎴栧叾浠栭潪ASCII瀛楃锛屽畠鍙兘鏃犳硶鎻愪緵鏈夋晥鐨勫姞瀵嗐備笅闈㈡槸涓涓狫avaScript鑴氭湰绀轰緥锛岀敤浜庡ASCII瀛楃缁勬垚鐨勫瓧绗︿覆杩涜缂栫爜鍜岃В鐮侊細
  • 鍏充簬base64銆乵d5绛鍔犲瘑瑙e瘑闂
    绛旓細瀛楄妭鈥濅腑涓嶈兘杞崲鎴愬彲鏄剧ず瀛楃鐨勬暟鍊笺傛瘮濡0-32鐨勬帶鍒跺瓧绗︼紝绌烘牸锛屽埗琛ㄧ閮戒笉鑳借鎵撳嵃鍦ㄧ焊涓婏紝base64鍙娇鐢ㄥぇ鍐欏皬鍐欐暟瀛楁爣鐐广傚彲浠ユ墦鍗板湪绾镐笂锛屾暟鎹彲浠ュ湪浼犵粺骞抽潰濯掍粙涓婃惡甯︺俶d5鏄暎鍒楀嚱鏁帮紝鎻愬彇鏁版嵁鐨勭壒寰侊紝杈撳嚭鏄笉鍙嗙殑鏁e垪鍊硷紝鐢ㄤ簬浠h〃鏌愪俊鎭疉鑰屽張涓嶆毚闇蹭俊鎭疉鐨勫唴瀹广備笉鐩存帴鐢ㄤ簬鍔犲瘑鏂囦欢銆
  • 扩展阅读:base64在线转换器 ... base64编码在线解密 ... base64位密码在线加密 ... base64在线还原图片 ... 图片base64在线解码编码 ... base64编码在线转图片 ... base64加密解密工具 ... base64前端加密后端解密 ... 打印base64格式图片 ...

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