精华内容
下载资源
问答
  • data:image/png;base64 详解

    2020-12-30 17:57:05
    网页上有些图片的src或css背景图片的url后面跟了一...base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJAQMAAADaX5RTAAAAA3NCSVQICAjb4U/gAAAABlBMVEX///+ZmZmOUEqyAAAAAnRSTlMA/1uRIrUAAAAJcEhZcwAACusAAArrAYKLDVoAAAAWdE...

    网页上有些图片的src或css背景图片的url后面跟了一大串字符,比如:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJAQMAAADaX5RTAAAAA3NCSVQICAjb4U/gAAAABlBMVEX///+ZmZmOUEqyAAAAAnRSTlMA/1uRIrUAAAAJcEhZcwAACusAAArrAYKLDVoAAAAWdEVYdENyZWF0aW9uIFRpbWUAMDkvMjAvMTIGkKG+AAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAAB1JREFUCJljONjA8LiBoZyBwY6BQQZMAtlAkYMNAF1fBs/zPvcnAAAAAElFTkSuQmCC

    那么这是什么呢?这是Data URI scheme。

    Data URI scheme是在RFC2397中定义的,目的是将一些小的数据,直接嵌入到网页中,从而不用再从外部文件载入。比如上面那串字符,其实是一张小图片,将这些字符复制黏贴到火狐的地址栏中并转到,就能看到它了,一张1X36的白灰png图片。

    在上面的Data URI中,data表示取得数据的协定名称,image/png 是数据类型名称,base64 是数据的编码方法,逗号后面就是这个image/png文件base64编码后的数据。

    目前,Data URI scheme支持的类型有:

    data:,文本数据

    data:text/plain,文本数据

    data:text/html,HTML代码

    data:text/html;base64,base64编码的HTML代码

    data:text/css,CSS代码

    data:text/css;base64,base64编码的CSS代码

    data:text/javascript,Javascript代码

    data:text/javascript;base64,base64编码的Javascript代码

    data:image/gif;base64,base64编码的gif图片数据

    data:image/png;base64,base64编码的png图片数据

    data:image/jpeg;base64,base64编码的jpeg图片数据

    data:image/x-icon;base64,base64编码的icon图片数据

    base64简单地说,它把一些 8-bit 数据翻译成标准 ASCII 字符,网上有很多免费的base64 编码和解码的工具

    PHP中可以用函数base64_encode() 进行编码,如echo base64_encode(file_get_contents(‘wg.png’));

    目前,IE8、Firfox、Chrome、Opera浏览器都支持这种小文件嵌入。

    举个图片的例子:

    网页中一张图片可以这样显示:

    也可以这样显示:

    把图像文件的内容直接写在了HTML 文件中,这样做的好处是,节省了一个HTTP 请求。坏处是浏览器不会缓存这种图像。

    展开全文
  • Base64的基本编码方式 base64编码是一种常见的编码方式,主要用于对8bit的字节进行编码。具体的编码方式是: 把三个字节作为一组,转化为二进制的形式,一共3*8=24个二进制位。 例如: abc 三个字符用ASCII编码,...

    Base64的基本编码方式

    base64编码是一种常见的编码方式,主要用于对8bit的字节进行编码。具体的编码方式是:

    1. 把三个字节作为一组,转化为二进制的形式,一共3*8=24个二进制位。
      例如: abc 三个字符用ASCII编码,转换为二进制:
      01100001 01100010 01100011
    2. 把24个二进制数字每6个一组,分为4组:
      01100001 01100010 01100011 被分为
      011000 010110 001001 100011
    3. 按照表格,把每组二进制串转为对应字符: 

    表格来源于百度百科

    011000 010110 001001 100011 先转为十进制数字:
    24 22 9 35 对照表格,转化为字符串:
    YWJj
    这个字符串就是最终的Base64编码,与网络上在线编码器生成的一致:

     

    字节数不能被三整除时的特殊处理

    如果需要编码的字节不能被3整除怎么办?比如最后剩下一个单字节a,或者双字节ab。这时候我们需要特殊处理:

    1. 不足6个二进制位的补0
    2. 不足4组的,最后补字符串=

    单字节a:
    a => 01100001 => 011000 01 => 补0 =>
    011000 010000 => 24 16 => YQ => 补=符号 => YQ==
    双字节ab:
    ab => 01100001 01100010 => 011000 010110 0010 => 补0 =>
    011000 010110 001000 => 24 22 8 => YWI => 补=符号 => YWI=

    安全的Base64编码概念

    通过上面的对照表可以看到,除了大小写字母和数字之外,Base64编码后的字符串中可能包含"+/="之类的字符,而"/","="等是URL的保留字符或不安全字符,因此如果直接在URL中传输Base64编码,保留字符和不安全字符会被替换为%XX的形式,对后端来说解码不方便。如果不替换,就会造成URL注入漏洞。
    因此,有一种URL安全的Base64编码,可以解决这个问题。 URL安全的Base64编码特点:

    1. 不能被3整除时,不补=符号。
    2. 生成Base64编码中,"+"和"/"被替换成其他非URL保留字符,使其可以直接放入URL中传输。
      比如"+"和"/"被替换成"-"和"_"。

    安全的Base64编码也有好多种,有些编码不会去掉等号,有些编码替换的符号不同。

    注意示项和示例

    注意,是编码后的"+"和"/"被替换,而不是编码前的原始字符被替换,而这种情况并不常见。在没有遇到补齐和编码后出现"+"和"/"的场景下,安全和不安全的Base64编码输出是一致的。
    这里看几个例子:

    1. 原字符串 abcdef
      原始Base编码: YWJjZGVm
      安全Base编码: YWJjZGVm
    2. 原字符串 +/=
      原始Base编码: Ky89
      安全Base编码: Ky89
    3. 原字符串 06?
      原始Base编码: MDY/
      安全Base编码: MDY_

    可以看到,即使原字符串中包含+/等特殊字符,也与Base编码是否安全无关。只有在生成后的编码中包含+/等特殊字符时,才会出现安全的Base64编码与原始Base编码不同而情况。

    Web前端中的使用

    Web前端中有几种常见的Base64编码的函数和库,这几种库是安全的还是不安全的?我进行了测试:

    import { Base64 } from "js-base64";
    import { btoau, atobu } from "b2a";
    const item = '06?';
    // 方法1
    const encode1 = Base64.encode(item);
    const decode1 = Base64.decode(encode1);
    // 方法2
    const encode2 = btoau(item);
    const decode2 = atobu(encode2);
    // 方法3
    const encode3 = window.btoa(item);
    const decode3 = window.atob(encode3);
    

    这是三种web前端常用的Base64编码方法。方法1使用了js-base64库,方法2使用了b2a库,方法3是window对象自带的编码方法。我用几个字符串进行了测试:
      

    总结:三个Base64编码函数,方法1是原始的,方法2和3是安全的。但是三个方法都没有去掉最后的"="符号。实际开发中使用时,需要和后端的解码方法保持一致即可,如果不一致,可能会遇到特殊数据时后端无法正常解码。另外,目前网络上常用的在线Base64编解码,一般都是原始的Base64编码形式,并不是安全的。

    展开全文
  • base64编码中: MIIBxzCCAWqgAwIBAgIIb/AAAAAAA.......O9LG+N1HoSVPYJAIhAIoUKo3gKT5HdY W1+700clvdLvryQgBEqVOHvtr54GrS ....表示省略中间数据 base64编码后结果中有+、/、=这种在url中属于特殊字符无法传递,所以...

    base64编码中:

    MIIBxzCCAWqgAwIBAgIIb/AAAAAAA.......O9LG+N1HoSVPYJAIhAIoUKo3gKT5HdY
    W1+700clvdLvryQgBEqVOHvtr54GrS
    ....表示省略中间数据
    

    base64编码后结果中有+、/、=这种在url中属于特殊字符无法传递,所以会对结果进行替换。

    base64其实就是把字符+和/分别变成-和_,末尾=号去掉(百度查询)

    url特殊字符:

    十六进制
    1+URL 中+号表示空格%2B
    2空格URL中的空格可以用+号或者编码%20
    3/分隔目录和子目录%2F
    4?分隔实际的 URL 和参数%3F
    5%指定特殊字符%25
    6#表示书签%23
    7&URL 中指定的参数间的分隔符%26
    8=URL 中指定参数的值%3D
    展开全文
  • 根据Javadoc,android.util.Base64.decode()有两个参数:文本和“标志”。这些标志是INT形式和(我引述):android.util.Base64编码/解码标志参数flags controls certain features of the decoded output. Pass ...

    根据Javadoc,android.util.Base64.decode()有两个参数:文本和“标志”。这些标志是INT形式和(我引述):android.util.Base64编码/解码标志参数

    flags controls certain features of the decoded output. Pass DEFAULT to decode standard Base64.

    首先,感谢给谁就给谁决定写一个模糊的Javadoc。我看到Base64有一些枚举字符串,实际上,我们一直使用Base64.NO_WRAP作为我们的标志。然而,在这个特定的实例中,我们需要使用两个标志:NO_WRAP和URL_SAFE。

    我们如何指定两个标志?我们尝试用管道('|')将它们分开,并且没有这样做。

    import android.util.Base64;

    public class Foo {

    public static void main(String[] args) {

    String urlSafeBase64EncodedString = getUrlSafeBase64EncodedString();

    int flags = ????????; //Need both Base64.NO_WRAP and Base64.URL_SAFE

    String decodedString = Base64.decode(urlSafeBase64EncodedString, flags);

    }

    }

    谢谢你的时间。

    2012-02-24

    Cody S

    +0

    “那没有做到” - 那它做了什么? (你究竟写了些什么*)如果你要抱怨其他人含糊不清,它有助于确保你自己:) –

    2012-02-24 18:33:35

    +0

    它没有做任何事情。它无法解码Base64字符串。我已经说过了,我用管道符号分隔了两个标志......那怎么不完全清楚? –

    2012-02-24 18:38:02

    +0

    完全有可能您的语法错误,例如“Base64.NO_WRAP | URL_SAFE”。那当然会产生汇编错误......这也会被“没有这样做”所涵盖。现在“它没有做任何事情”和“它无法解码Base64字符串”并不完全相同。 *它是如何解码失败的?有没有例外,它是否给出了空洞的结果,它挂了吗? –

    2012-02-24 18:42:34

    展开全文
  • Java 和 JavaScript Base64编码在开发Java Web应用的时候,可能会在服务器端用Java做Base64编码,而在客户端用JavaScript进行解码。这样就要求两边的Base64编码机制保持一致。使用Base64编码,可能会碰到各种奇怪...
  • base64模块是用来作base64编码解码的。这种编码方式在电子邮件中是很常见的。它可以把不能作为文本显示的二进制数据编码为可显示的文本信息。编码后的文本大小会增大1/3。闲话不说了,base64模块真正用的上的方法...
  • Base64在我看来很重要的一个用途是将复杂的码比如GBK、UTF8、MIME等复杂的码,变成单字节的简单ASCII字符,便于在各种不同环境(计算机)之间传递信息。这很好理解,只要是计算机,必须得支持ASCII标准,但不一定支持...
  • Js实现Base64编码与解码Base64其实是一种简单的置换加密方式,但是BASE64的用处往往并不是为了防止信息泄露,而且为了方便传输,进过BASE64编码后的信息会比原始信息长,大概是4/3倍。Base64是一种基于64个可打印...
  • 前言昨天团队的学妹来问关于POP3协议的问题,所以今天稍稍研究了下POP3协议的格式...本篇先讲一下base64模块,该模块提供了关于Base16,Base32,Base64Base85和Ascii85的编码和解码相关的函数。有关poplib模块的内...
  • 大家可能注意到了,网页上有些图片的src或css背景图片的url后面跟了一大串字符,比如...base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAYAAABIdFAMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHhJREFUeNo8zjs...
  • public static void base64ToFile(String base64, String fileName, String savePath) {File file = null;//创建文件目录String filePath = savePath;File dir = new File(filePath);if (!dir.exists() && !...
  • base64的原理详解

    2021-01-12 08:30:18
    在做支付系统时,系统之间的报文交互都需要使用Base64对明文进行转码,然后再进行签名或加密,之后再进行(或再次Base64)传输。那么,Base64到底起到什么作用呢? 在参数传输的过程中经常遇到的一种情况:使用全...
  • base64加密原理详解 Base64从本质来说,其实并不是加密算法,只是一种编码方式而已,Base64的"加解密"也不叫加密解密,而是编码解码,但是现在一般都把它归为加密算法。 Base64编码,是我们程序开发中经常使用到...
  • 1、base64加密算法 1、加密算法简述 base64:因为HTTP协议是文本协议,传输信息时只支持可打印字符,所以为了使HTTP协议能够支持传输图片、文件等等数据,只能先将数据转换成base64的字符串来保存。 可打印字符:...
  • /*** @Descriptionmap 将图片文件转化为字节数组字符串,并对其进行Base64编码处理* @author temdy* @Date 2015-01-26* @param path 图片路径* @return*/public static String imageToBase64(String path) {// 将...
  • 废话不多说了,直接给大家贴java实现图片与base84字符串之间的转换代码了,具体代码如下所示:package cn.com;import Java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import ...
  • 本篇文章给大家分享的是jJavaScript实现Base64编码与解码的代码详解,内容挺不错的,希望可以帮助到有需要的朋友一、加密解密方法使用//1.加密 var str = '124中文内容';var base = new Base64();var result = base....
  • 这篇文章主要介绍了php base64 编码与解码实例代码的相关资料,需要的朋友可以参考下php base64 编码与解码详解1.自定义规则方式编码和解码实例public function test_changinttoStr () {$intvalue1 = 1232344234;$int...
  • python3实现base64编码

    千次阅读 2021-03-11 15:40:36
    b64encode函数的参数为byte类型,而python3中字符都为unicode编码,所以必须先转码。Base64生成的编码都是ascii字符。...code = (base64.b64encode(s.encode('utf-8'))).decode('utf-8') #base64编码 prin...
  • 设计此种编码是为了使二进制数据可以通过非纯 8-bit 的传输层传输,例如电子邮件的内容就是通过base64转码后传输的。Base64-encoded后, 数据要比原始数据多占用 33% 左右的空间。利用base64加密文件:...
  • base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOAQMAAAAlhr+SAAAABlBMVEUqLjNSXWS1zSUzAAAAD0lEQVQI12NgwADMYIQBAACrAAd4ROv5AAAAAElFTkSuQmCC) 这是什么呢?查阅资料大概了解:这是Data URI scheme。 那么什么是Da
  • 大家可能注意到了,网页上有些图片...base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAYAAABIdFAMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHhJREFUeNo8zjsOxCAMBFB/KEAUFFR0Cbng3nQPw68ArZdAlOZppPFIBhH5EAB8b
  • 今天查看一些网站的css中发现了background-image:url...base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAYAAABIdFAMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHhJREFUeNo8zjsOxCAMBFB/KEAUFFR0Cbng3nQPw68Ar...
  • php源码之将图片转化为data/base64数据流这里我们分享一个将图片转换为...$base64_img = base64EncodeImage($img);echo '';/* 作者:http://www.manongjc.com */function base64EncodeImage ($image_file) {$base64_...
  • php中base64_decode与base64_encode加密解密函数,实例分析了base64加密解密函数的具体用法,具有一定的实用价值,需要的朋友可以参考下本文实例讲述了php中base64_decode与base64_encode加密解密函数。分享给大家供...
  • 1. 说明Base64加密方式:比较简单,加密快,对普通大众可以起到加密的作用。在程序员眼中和透明一样。Base64应用场景:图片转码(应用于邮件,img标签,http加密)2. 案例importjava.util.Base64;/*** Java 8的java....
  • 本文实例讲述了jQuery实现base64前台加密解密功能。分享给大家供大家参考,具体如下:关于加密,很多人想到encodeURI和escape。这个对加密url,尤其是带中文参数的url很有用。如果只是想做加密解密,类似于Java的DES...
  • java使用Base64编码实例

    2021-02-12 23:46:08
    本文实例为大家分享了java使用Base64编码的具体代码,供大家参考,具体内容如下Test Base64package com.weiwen.provider.utils;import java.io.IOException;import com.alibaba.fastjson.JSON;import lombok.extern....
  • java BASE64Encoder详解 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,在发送电子邮件时,服务器认证的用户名和密码需要用Base64编码,附件也需要用Base64编码。 Base64要求把每三个8Bit的字节转换...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 94,193
精华内容 37,677
关键字:

base64详解