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

article/2025/9/13 6:20:00

    欢迎大家搜索“小猴子的技术笔记”关注我的公众号,有问题可以及时和我交流。


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

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

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

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

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

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

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

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

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

    1.BMP 文件头标识 (2 bytes) 42 4D
    2.PNG 文件头标识 (8 bytes) 89 50 4E 47 0D 0A 1A 0A
    3.GIF 文件头标识 (6 bytes) 47 49 46 38 39(37) 61
    4.JPEG/JPG 文件头标识 (2 bytes): FF D8 (SOI) (JPEG 文件标识)
    于是我在电脑上保存了一个为“.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的编码原理,明白了文件在电脑中存储并不是靠简简单单的后缀名来区分的,而是有文件头信息的。文件到底是一个什么文件,还是要靠文件头信息来决定的。所以,你以后的程序判断文件类型千万不要仅仅判断后缀名就完事了哦!

在这里插入图片描述


http://chatgpt.dhexx.cn/article/P7hO9Ssg.shtml

相关文章

base64编码原理之python应用

base64产生原因? 先看ascii码的图片 scii码的128~255之间的值是不可见字符。而在网络上交换数据时,比如说从A地传到B地,往往要经过多个路由设备,由于不同的设备对字符的处理方式有一些不同,这样那些不可见…

一文搞懂Base64编码原理

Base64是最常见的用于传输8Bit字节码的编码方式之一,它是一种基于64个可打印字符来表示二进制数据的方法。 Base64是什么 Base64编码,是由64个字符组成编码集:26个大写字母AZ,26个小写字母az,10个数字0~9&#xff0c…

Base64编码解码原理

本篇文章主要是从Base64的原理入手,并给出java的Base64实现。方便了解、学习Base64。 base64的简介----摘自于百度百科 一、Base64大致用途 很早之前,电子邮件刚刚问世,那时候消息的传递都是英文,后来中国开通了互联网之后&#…

Java—Base64编码原理

Base64作为java编程中常见的编码方式,经常在各种加密(例如AES、RSA等等)的过程中用来实现加解密中间产物可读性的重要工具,很值得我们去了解一下它的原理。Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Ba…

一文轻松明白 Base64 编码原理

把图片丢进浏览器,打开sources能看到一长串字符串,这是图片的Base64编码。这一长串编码到底是怎么生成的呢? 我们接下来探索一下base64编码的原理 Base64 名称的由来 Base64编码要求把3个8位的字节(3824)转化为4个6…

base64编码原理及代码实现

在ctf里reverse经常会有base64相关的题型,每次写到这类题型只能凭经验猜测考点来解题,特此出一个base64相关的博客,加深对base64的理解,下次再看到伪代码也不会觉得慌了,毕竟纵使实现形式不同,代码的核心逻…

Base64编码的原理与常用实现

这篇主要是为了后面好介绍加密算法,做的铺垫。 这个是基础,什么是一个程序员的涵养,这些基础就是涵养。 平时可能用不到,但必须得会。 如果连这个原理都说不上来,就别玩王者荣耀绝地求生英雄联盟和平精英了&#xff0c…

Base64原理及魔改更换码表

一,Base64是什么(原理比较难理解,可参考下面的实践 ) Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于2的6次方等于64,所以每6个比特为一个单元,对应某个可打印字符。三个字节有24个比特…

base64加密原理解析

开发者对Base64编码肯定很熟悉,是否对它有很清晰的认识就不一定了。实际 上Base64已经简单到不能再简单了,如果对它的理解还是模棱两可实在不应该。大概介绍一下Base64的相关内容,花几分钟时间就可以彻底理解它。文 章下边贴了一个Base64的编…

Base64加密原理

Base64加密方式是将三个八位的字节转化为四个六位的字节(不足八位的高位补00),3*8 4*6;,所以base64加密过后的内容比原来的大三分之一; 举例:加密“ace”, ace转化为二进制为&…

Base64编码原理分析

文章目录 一、认识(一)认识(二)计算(1)规则(2)示例(3)Base64编码转换表 二、网页图片转base64编码分析(一)Data URI(二&am…

base64编码,原理是什么,有什么作用?

base64到底是什么东西呢? Base64编码是网络上常见的用于传输8bit字节数据的一种编码方式之一 , 有些人和书本会将编码写成加密算法,这其实是欠妥的。因为任何人拿到编码后的数据都能转化成原始数据,算法是透明的,也不存在秘钥的概…

一篇文章彻底掌握Base64编码原理

一篇文章彻底掌握Base64编码原理 在互联网中的每一刻,你可能都在享受着Base64带来的便捷,但对于Base64的基础原理又了解多少?今天这篇博文带领大家了解一下Base64的底层实现。 Base64的由来 目前Base64已经成为网络上常见的传输8Bit字节代…

Base64编码解码原理详解

Base64编码解码原理详解 1. Base64字符的组成部分 Base64所用字符: 0,1,2 ….9 A,B,C,D…Z a,b,c,d…z / 对应ASCII: 48,49…58,65,66…90,97,98…122, 43,47 2. 10个数字,26个大写字母,26个小写字母,1个&#xff0c…

彻底弄懂base64的编码与解码原理

作者介绍 背景 base64的编码原理网上讲解较多,但解码原理讲解较少,并且没有对其中的内部实现原理进行剖析。想要彻底了解base64的编码与解码原理,请耐心看完此文,你一定会有所收获。 涉及算法与逻辑运算概念 在探究base64编码原理…

深入理解 Base64 底层原理

Base64 是一种常见数据编码方式,常用于数据传输。对于移动开发者来讲,网络请求中会经常使用到。对 JSON 熟悉的同学都知道,JSON 的序列化工具都不支持将 byte 数组直接放入 JSON 数据中,针对这种二进制数据,在处理的时…

Base64基本原理

1.什么是Base64 Base64是一种基于64个可打印字符来表示二进制数据的编码方式,是从二进制数据到字符的过程。 原则上,计算机中所有内容都是二进制形式存储的,所以所有内容(包括文本、影音、图片等)都可以用base64来表示…

一篇文章彻底弄懂Base64编码原理

在互联网中的每一刻,你可能都在享受着Base64带来的便捷,但对于Base64的基础原理又了解多少?今天这篇博文带领大家了解一下Base64的底层实现。 Base64的由来 目前Base64已经成为网络上常见的传输8Bit字节代码的编码方式之一。在做支付系统时&…

Base64编码原理

一、Base64是什么 base 64、base 32、base 16 编码建议标准 https://www.ietf.org/rfc/rfc4648.txt Base64是基于64种字符的编码算法,即将数据使用64种字符表示,编码后的Base64字符串长度 通常为原来的3-4倍。(补充:Base32就是…

Base64原理

前言 Base64是什么?它和加解密操作有什么关系吗?我们看一下下边这段字符串: aGVsbG8gd29ybGQ= 这就是经过Base64编码后的字符串,对它进行Base64解码,获得它原来的内容: hello world 这有点加密解密的意味,不过Base64并不能称为加密算法,仅仅是加密算法的近亲,可以称之…