Base64编码

银河麒麟v10-arm SEALOS离线部署k8s集群(v1.22.8) 示例 如果你想保存一个名为 "my_snapshot" 的 etcd 快照到指定的对象路径你可以使用以下命令: sealos etcd save --backupPath /root --name my_snapshot 如果文件名带时间戳:my_snapshot$(date +"%Y%m%d_%H%M%S") 会生成一个形如 20230913_143045 的时间戳。--restorePath string:指定快照恢复目录(默认为 "/opt/sealos/etcd-restore")。 阅读详情

public final class Base64 {
    static private final int BASELENGTH = 255;
    static private final int LOOKUPLENGTH = 64;
    static private final int TWENTYFOURBITGROUP = 24;
    static private final int EIGHTBIT = 8;
    static private final int SIXTEENBIT = 16;
    static private final int SIXBIT = 6;
    static private final int FOURBYTE = 4;
    static private final int SIGN = -128;
    static private final byte PAD = (byte) '=';
    static private byte[] base64Alphabet = new byte[BASELENGTH];
    static private byte[] lookUpBase64Alphabet = new byte[LOOKUPLENGTH];

    static {
        for (int i = 0; i < BASELENGTH; i++) {
            base64Alphabet[i] = -1;
        }

        for (int i = 'Z'; i >= 'A'; i--) {
            base64Alphabet[i] = (byte) (i - 'A');
        }

        for (int i = 'z'; i >= 'a'; i--) {
            base64Alphabet[i] = (byte) (i - 'a' + 26);
        }

        for (int i = '9'; i >= '0'; i--) {
            base64Alphabet[i] = (byte) (i - '0' + 52);
        }

        base64Alphabet['+'] = 62;
        base64Alphabet['/'] = 63;

        for (int i = 0; i <= 25; i++)
            lookUpBase64Alphabet[i] = (byte) ('A' + i);

        for (int i = 26, j = 0; i <= 51; i++, j++)
            lookUpBase64Alphabet[i] = (byte) ('a' + j);

        for (int i = 52, j = 0; i <= 61; i++, j++)
            lookUpBase64Alphabet[i] = (byte) ('0' + j);

        lookUpBase64Alphabet[62] = (byte) '+';
        lookUpBase64Alphabet[63] = (byte) '/';
    }

    public static boolean isBase64(String isValidString) {
        return isArrayByteBase64(isValidString.getBytes());
    }

    public static boolean isBase64(byte octect) {
        //shall we ignore white space? JEFF??
        return ((octect == PAD) || (base64Alphabet[octect] != -1));
    }

    public static boolean isArrayByteBase64(byte[] arrayOctect) {
        int length = arrayOctect.length;

        if (length == 0) {
            // shouldn't a 0 length array be valid base64 data?
            // return false;
            return true;
        }

        for (int i = 0; i < length; i++) {
            if (!Base64.isBase64(arrayOctect[i])) {
                return false;
            }
        }

        return true;
    }

    public static String encode(String strData) {
        byte[] tmp = encode(strData.getBytes());

        return new String(tmp);
    }

    /**
 * Encodes hex octects into Base64.
 *
 * @param binaryData Array containing binary data to encode.
 * @return Base64-encoded data.
 */
    public static byte[] encode(byte[] binaryData) {
        int lengthDataBits = binaryData.length * EIGHTBIT;
        int fewerThan24bits = lengthDataBits % TWENTYFOURBITGROUP;
        int numberTriplets = lengthDataBits / TWENTYFOURBITGROUP;
        byte[] encodedData = null;

        if (fewerThan24bits != 0) {
            //data not divisible by 24 bit
            encodedData = new byte[(numberTriplets + 1) * 4];
        } else {
            // 16 or 8 bit
            encodedData = new byte[numberTriplets * 4];
        }

        byte k = 0;
        byte l = 0;
        byte b1 = 0;
        byte b2 = 0;
        byte b3 = 0;

        int encodedIndex = 0;
        int dataIndex = 0;
        int i = 0;

        for (i = 0; i < numberTriplets; i++) {
            dataIndex = i * 3;
            b1 = binaryData[dataIndex];
            b2 = binaryData[dataIndex + 1];
            b3 = binaryData[dataIndex + 2];

            l = (byte) (b2 & 0x0f);
            k = (byte) (b1 & 0x03);

            encodedIndex = i * 4;

            byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2)
                                           : (byte) (((b1) >> 2) ^ 0xc0);
            byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4)
                                           : (byte) (((b2) >> 4) ^ 0xf0);
            byte val3 = ((b3 & SIGN) == 0) ? (byte) (b3 >> 6)
                                           : (byte) (((b3) >> 6) ^ 0xfc);

            encodedData[encodedIndex] = lookUpBase64Alphabet[val1];
            encodedData[encodedIndex + 1] = lookUpBase64Alphabet[val2 |
                (k << 4)];
            encodedData[encodedIndex + 2] = lookUpBase64Alphabet[(l << 2) |
                val3];
            encodedData[encodedIndex + 3] = lookUpBase64Alphabet[b3 & 0x3f];
        }

        // form integral number of 6-bit groups
        dataIndex = i * 3;
        encodedIndex = i * 4;

        if (fewerThan24bits == EIGHTBIT) {
            b1 = binaryData[dataIndex];
            k = (byte) (b1 & 0x03);

            byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2)
                                           : (byte) (((b1) >> 2) ^ 0xc0);
            encodedData[encodedIndex] = lookUpBase64Alphabet[val1];
            encodedData[encodedIndex + 1] = lookUpBase64Alphabet[k << 4];
            encodedData[encodedIndex + 2] = PAD;
            encodedData[encodedIndex + 3] = PAD;
        } else if (fewerThan24bits == SIXTEENBIT) {
            b1 = binaryData[dataIndex];
            b2 = binaryData[dataIndex + 1];
            l = (byte) (b2 & 0x0f);
            k = (byte) (b1 & 0x03);

            byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2)
                                           : (byte) (((b1) >> 2) ^ 0xc0);
            byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4)
                                           : (byte) (((b2) >> 4) ^ 0xf0);

            encodedData[encodedIndex] = lookUpBase64Alphabet[val1];
            encodedData[encodedIndex + 1] = lookUpBase64Alphabet[val2 |
                (k << 4)];
            encodedData[encodedIndex + 2] = lookUpBase64Alphabet[l << 2];
            encodedData[encodedIndex + 3] = PAD;
        }

        return encodedData;
    }

    /**
 * Decodes Base64 data into octects
 *
 * @param binaryData Byte array containing Base64 data
 * @return Array containing decoded data.
 */
    public static byte[] decode(byte[] base64Data) {
        // handle the edge case, so we don't have to worry about it later
        if (base64Data.length == 0) {
            return new byte[0];
        }

        int numberQuadruple = base64Data.length / FOURBYTE;
        byte[] decodedData = null;
        byte b1 = 0;
        byte b2 = 0;
        byte b3 = 0;
        byte b4 = 0;
        byte marker0 = 0;
        byte marker1 = 0;

        // Throw away anything not in base64Data
        int encodedIndex = 0;
        int dataIndex = 0;

        {
            // this sizes the output array properly - rlw
            int lastData = base64Data.length;

            // ignore the '=' padding
            while (base64Data[lastData - 1] == PAD) {
                if (--lastData == 0) {
                    return new byte[0];
                }
            }

            decodedData = new byte[lastData - numberQuadruple];
        }

        for (int i = 0; i < numberQuadruple; i++) {
            dataIndex = i * 4;
            marker0 = base64Data[dataIndex + 2];
            marker1 = base64Data[dataIndex + 3];

            b1 = base64Alphabet[base64Data[dataIndex]];
            b2 = base64Alphabet[base64Data[dataIndex + 1]];

            if ((marker0 != PAD) && (marker1 != PAD)) {
                //No PAD e.g 3cQl
                b3 = base64Alphabet[marker0];
                b4 = base64Alphabet[marker1];

                decodedData[encodedIndex] = (byte) ((b1 << 2) | (b2 >> 4));
                decodedData[encodedIndex + 1] = (byte) (((b2 & 0xf) << 4) |
                    ((b3 >> 2) & 0xf));
                decodedData[encodedIndex + 2] = (byte) ((b3 << 6) | b4);
            } else if (marker0 == PAD) {
                //Two PAD e.g. 3c[Pad][Pad]
                decodedData[encodedIndex] = (byte) ((b1 << 2) | (b2 >> 4));
            } else if (marker1 == PAD) {
                //One PAD e.g. 3cQ[Pad]
                b3 = base64Alphabet[marker0];

                decodedData[encodedIndex] = (byte) ((b1 << 2) | (b2 >> 4));
                decodedData[encodedIndex + 1] = (byte) (((b2 & 0xf) << 4) |
                    ((b3 >> 2) & 0xf));
            }

            encodedIndex += 3;
        }

        return decodedData;
    }

    public static void main(String[] args) {
        String a = "bonjovi@yahoo.com.cn";
        System.out.println(Base64.encode(a));
    }
}

自动驾驶算法/规划决策控制算法面经汇总、学习路线、面经心得 自动驾驶算法学习路线,面试求职大全 阅读详情

相关推荐

模拟IC设计避坑:手把手教你用Cadence仿真恒定跨导轨到轨运放(附完整工艺库文件)

本文详细解析了使用Cadence仿真恒定跨导轨到轨运放的全流程,涵盖电路原理、工艺库配置、尺寸设计及仿真分析。通过1:3电流镜补偿技术实现跨导稳定,提供CSMC 0.25um工艺下的实战案例,帮助工程师规避设计陷阱,提升模拟IC设计效率。

weixin_30952535的博客 494

Base64编码理解与实现(编码图片)

基础 Base64是一种数据编码方式,目的是让数据符合传输协议的要求。 在项目中,将报文进行压缩、加密后,最后一步必然是使用base64编码,因为base64编码的字符串,更适合不同平台、不同语言的传输; 这算法是编码, 不是压缩, 编码后只会增加字节数;(比之前多3分之一,如之前是3,编码后是4) 算法简单, 几乎不会影响效率; 算法可逆, 解码很方便, 不用于私密信息通信; 虽然解码方便, 但毕竟编码了, 肉眼还是不能直接看出原始内容; 加密后的字符串只有[0-9a-zA-Z+/=], 不可打印

白鸽 1228

手把手教你配置UFS的PSA状态机:WRITE/UNMAP命令实战与LBA映射避雷

本文详细解析了UFS PSA状态机的配置流程,重点探讨了在Pre-soldering状态下WRITE命令的原子性操作原则与单次写入LBA的重要性。通过实战代码示例,指导开发者如何正确初始化PSA环境、切换状态机,并深入剖析了使用UNMAP命令清理LBA映射时的常见陷阱与避雷指南,确保量产数据安全与良率。

weixin_29213525的博客 419

图片转为Base64太长进行二次压缩

入参为已经转为Base64的字符长串,转之前length():4526480,转之后为105672。

weixin_40499452的博客 4346

TOPCon vs PERC:2024年光伏电站投资,哪种技术更划算?

本文深入分析了2024年光伏电站投资中TOPCon与PERC技术的财务表现。通过对比初始系统成本、全生命周期发电量及环境适应性,指出当前TOPCon组件与PERC价差已显著缩小,其更高的转换效率和更低的衰减率能有效降低度电成本并提升项目内部收益率,为投资者提供更具长期价值的方案。

p5l2m9n4o6q的博客 266

在Rviz仿真环境中搭建传送带

<geometry><material>

qq_58268456的博客 936

Base64的编码以及解码

Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。 Base64要求把每三个8Bit的字节转换为四个6Bit的字节(38 = 46 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。 规则 关于这个编码的规则: ①把3个字节变成4个字节。 ②每76个字符加一个换行符。 ③最后的结束符也要处理。 例子: 转换前 11111111, 11111111, 111111

dshakjhfvf的博客 8607

CPG控制网络入门

从线性变换开始推导

妖米的博客 5044

base64文件大小计算

有时候图片被base64之后需要计算图片大小,因为被编码后全是字符,计算文件大小可以反序列化成文件之后再获取大小,但是会比较麻烦。简单介绍一种利用base64编码原理计算大小的方法. 编码原理 要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式。 如果剩下的字符不足3个字节,用0填充,输出字符使用’=’,因此编码后输出...

weixin_30485379的博客 1341

IOS APP上架被拒 4.3(a) - Design - Spam,成功

成功解决IOS APP上架被拒 4.3(a) - Design - Spam,本篇博客记录了详细过程

qq_40147106的博客 6908

使用AutoDL云服务器训练YOLO计算机视觉网络模型(AutoDL+Xftp+VS Code),附详细操作步骤

AutoDL AI算力云是一个提供人工智能算力服务的云平台。丰富的GPU资源:提供多种GPU型号,包括NVIDIA的A100A800L40V100RTX 4090RTX 3090等,能满足我们在不同场景下的需求,无论是进行大规模的AI训练还是复杂的科学计算等任务,都可以找到合适的GPU资源。灵活的付费方式:支持按量付费包日包周包月等多种付费模式。对于短期的实验或不确定时长的项目,可以选择按量付费;如果有长期稳定的算力需求,预付费或包周包月则可能更划算,可以根据自己的需求和预算进行选择。集成主流框架:集成了。

Limiiiing的博客 957

什么是Base64,以及在Java中使用Base64编码

Base64是一种用64个字符(0-9,a-z,A-Z,+,/)来表示二进制数据的方法,是基于64个可打印字符进行编码的。Base是一种索引编码,每6个bit位作为一个单元,对应一个字符,为了保证所输出的编码为可读字符,Base64制定了一个编码表,以便进行统一转换,编码表的大小为2^6=64,这也是Base64名称的由来。

优快云_YYD_997的博客 4468

《囚徒健身》 六艺,十式

文章目录《囚徒健身》 六艺,十式1、六艺,十式2、优缺点3、手臂和上半身 《囚徒健身》 六艺,十式 1、六艺,十式 1、俯卧撑: 2、深蹲: 3、举腿: 4、引体向上: 5、桥: 6、倒立撑: 十式就是每个动作分拆为十个不同的动作等级,进行训练 每一式里面,又根据做的组数和个数,分成三层,初级,中级,高级 依次循序渐进,每完成上一个动作的高级,则向下一个动作前进 2、优缺点 优点 : 六个动作都是很常见的,日常的动作,不太需要依赖什么器械,随时随地都可以练习,很方便 这些动作可以覆盖到全身大部分

简简单单Onlinezuozuo 4564

base64编码_Base64编码详解

来源 | 公众号 架构师必备Base64编码原理Base64编码之所以称为Base64,是因为其使用64个字符来对任意数据进行编码,同理有Base32、Base16编码。标准Base64编码使用的64个字符为:这64个字符是各种字符编码(比如ASCII编码)所使用字符的子集,基本,并且可打印。唯一有点特殊的是最后两个字符,因对最后两个字符的选择不同,Base64编码又有很多变种,...

weixin_39621185的博客 2181

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

HEX编码、Base64编码

摘要 本文将讲述HEX 和Base64,编码的规则。 HEX编码 hex编码也称之为Base16 编码 就是把一个字节,用十六进制来表示, 表示的结果得是字符形式的。 说过程大家就会更加容易理解 比如说字符的 ‘a’,在计算机底层存储的是 0110 0001 ,对应的16进制就是61 ,它对应的字符 是'61' 也就是说 ‘a’ 经过HEX编码转化成了 '61' ,从计算存储二进制的角度是 从0110 0001经过HEX编码成了 0011 0110 0000 0001,占用的存储扩大了一倍。 其他任意

你好 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

base64怎么编码

换算单位 1字=2字节;1字节=8位;1位=1比特;1字=16位=16比特; 字节=Byte          比特=bit bit是表示信息的最小单位,只有两种状态:0和1 base64 base64代码对应表 base64代码范围:A-Za-z0-9+/ 26个大写字母、26个小写字母、10个数字、两个符号 26+26+10+2=64; 其实是 65 个字符, = 是填充字符; 64 个字符需..

weixin_52103018的博客 1416

base64编码

这是 Base64 编码所使用的标准编码表,它包含了 64 个可打印的 ASCII 字符,按照一定顺序排列,用于将二进制数据转换为对应的可打印字符形式。

weixin_68995006的博客 1100

【BASE64编码——编码规则】

BASE64编码。

XWWW668899的博客 1975

关于Base64编码

很多朋友可能都会使用到BASE64这种编码格式,但是编码不等于加密(encoding is not encrypting),编码只是将数据进行格式化,而加密使数据具有保密性。 在编码方式的选择时,BASE64编码可以将数据转换为普通文本格式,例如X.509标准格式的证书(.cer)就可以导出为BASE64编码格式的数据,如下所示: ----BEGIN CERTIFICATE---

NCNC 3246

Openresty base64编码

OpenResty目前内建支持的有Base64和JSON两种格式,下面我们介绍base64. Base64格式使用64个字符,可以把任意数据转换为ASCII码可见字符串,应用得非常普遍。OpenResty使用ngx.encode_base64和ngx.decode_base64这两个函数实现了标准的Base64编码和解码: local str = "1234" local enc = ngx.encode_base64(str) -- 编码为“ MTizNA==” local dec= ngx

赶路人儿 4633

base64编码_彻底弄明白Base64 编码

Base64 encoding/decoding常见于各种authentication和防盗链的实现当中。彻底搞懂它绝对提升团队troubleshooting的底气。我们从纯手工方式编码解码开始,然后看看学到的技能怎么样应用在实际的troubleshooting 中。准备工作: 我们应知道一个byte有8个bits,并且知道怎么表示它。 我们应该comfortable with hex, bina...

weixin_39849762的博客 1044

Base64编码简介

Base64编码简介 基本概念 Base64这个术语最初是在“MIME内容传输编码规范”中提出的。Base64不是一种加密算法,虽然编码后的字符串看起来有点加密的赶脚。它实际上是一种“二进制到文本”的编码方法,它能够将给定的任意二进制数据转换(映射)为ASCII字符串的形式,以便在只支持文本的环境中也能够顺利地传输二进制数据。例如支持MIME的电子邮件应用,或需要在XML中存储复杂数据(例如图片)...

weixin_42306440的博客 1638
上一篇: 头儿的三个忠告
下一篇: 你知道Wikis吗
botree
博客等级 码龄25年 2粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值