精华内容
下载资源
问答
  • 解决思路:首先判断字符是否utf-8与base64编码;然后在转码 //获取器 提前修改 public function getNicknameAttr($v) { if(self::is_utf8(base64_decode($v)) && self::str_is_base64($v) != ''){ $data...

    原因-:数据中含有不是base64编码字符;

    解决思路:首先判断字符是否utf-8与base64编码;然后在转码

    //获取器 提前修改
        public function getNicknameAttr($v)
        {
            if(self::is_utf8(base64_decode($v)) && self::str_is_base64($v) != ''){
            $data = base64_decode($v);
            if($data=='')
                return $v;
            return $data;
            }
            return $v;
        }
        public static function is_utf8($str)
        {
            $len = strlen($str);
            for ($i = 0; $i < $len; $i++) {
                $c = ord($str[$i]);
                if ($c > 128) {
                    if (($c > 247)) {
                        return false;
                    } elseif ($c > 239) {
                        $bytes = 4;
                    } elseif ($c > 223) {
                        $bytes = 3;
                    } elseif ($c > 191) {
                        $bytes = 2;
                    } else {
                        return false;
                    }
                    if (($i + $bytes) > $len) {
                        return false;
                    }
                    while ($bytes > 1) {
                        $i++;
                        $b = ord($str[$i]);
                        if ($b < 128 || $b > 191) {
                            return false;
                        }
                        $bytes--;
                    }
                }
            }
            return true;
        }
        /**
         * 判断字符串是不是base64编码
         */
        function str_is_base64($str)
        {
            return $str == base64_encode(base64_decode($str)) ? true : false;
        }
    

    参考->https://www.cnblogs.com/best-always/p/12036070.html

    展开全文
  • 这里写自定义目录标题后端加密,前端解密后端加密方法(C#)前端解密 后端加密,前端解密 ... return Base64Encode(Encoding.UTF8, source); } /// <summary> /// Base64加密 /// </summary&

    后端加密,前端解密

    后端加密方法(C#)

     public static string Base64Encode(string source)
            {
                return Base64Encode(Encoding.UTF8, source);
            }
    
            /// <summary>
            /// Base64加密
            /// </summary>
            /// <param name="encodeType">加密采用的编码方式</param>
            /// <param name="source">待加密的明文</param>
            /// <returns></returns>
            public static string Base64Encode(Encoding encodeType, string source)
            {
                string encode = string.Empty;
                byte[] bytes = encodeType.GetBytes(source);
                try
                {
                    encode = Convert.ToBase64String(bytes);
                }
                catch
                {
                    encode = source;
                }
                return encode;
            }
    

    前端解密

       function atou(str) {
            return decodeURIComponent(escape(window.atob(str)));
        }
    
    展开全文
  • 利用 encodeURIComponent... # 将 utf8 转为 base64 function utf8_to_b64( str ) { return window.btoa(unescape(encodeURIComponent( str ))); } # 将 base64 转为 utf8 function b64_to_utf8( str ) { return

    利用 encodeURIComponent/decodeURIComponent 和escape/unescape

        # 将 utf8 转为 base64
        function utf8_to_b64( str ) {
            return window.btoa(unescape(encodeURIComponent( str )));
        }
    
    	# 将 base64 转为 utf8
        function b64_to_utf8( str ) {
            return decodeURIComponent(escape(window.atob( str )));
        }
    
        # 使用
        utf8_to_b64('? à la mode'); // "4pyTIMOgIGxhIG1vZGU="
        b64_to_utf8('4pyTIMOgIGxhIG1vZGU='); // "? à la mode"
    
    展开全文
  • 1、php下转化base64编码php中,文本文件的编码决定了程序...如果文本文件是utf-8,则输出结果为:5Lil,而在gbk文件中的输出结果是:0c8=注意:php中转换成base64编码时,和网页编码没有关系。2、js下转化base64编...

    1、php下转化base64编码

    php中,文本文件的编码决定了程序变量的编码,比如以下代码在不同编码的php文件中,展示的效果也是不一样的

    $word = '严';

    echo base64_encode($word);

    ?>

    如果文本文件是utf-8,则输出结果为:5Lil,而在gbk文件中的输出结果是:0c8=

    注意:php中转换成base64编码时,和网页编码没有关系。

    2、js下转化base64编码

    首先,假定网页的编码是utf-8,我们希望对于同样的字符串,用PHP和Javascript可以得到同样的Base64编码。

    这里就会产生一个问题。因为Javascript内部的字符串,都以utf-16的形式进行保存,因此编码的时候,我们首先必须将utf-8的值转成utf-16再编码,解码的时候,则是解码后还需要将utf-16的值转回成utf-8。

    b6c494739269bbcf6062f4348b83cbbe.gif

    /* utf.js - UTF-8 <=> UTF-16 convertion

    *

    * Copyright (C) 1999 Masanao Izumo

    * Version: 1.0

    * LastModified: Dec 25 1999

    * This library is free. You can redistribute it and/or modify it.

    */

    /*

    * Interfaces:

    * utf8 = utf16to8(utf16);

    * utf16 = utf8to16(utf8);

    */

    function utf16to8(str) {

    var out, i, len, c;

    out = "";

    len = str.length;

    for(i = 0; i < len; i++) {

    c = str.charCodeAt(i);

    if ((c >= 0x0001) && (c <= 0x007F)) {

    out += str.charAt(i);

    } else if (c > 0x07FF) {

    out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));

    out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F));

    out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));

    } else {

    out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F));

    out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));

    }

    }

    return out;

    }

    function utf8to16(str) {

    var out, i, len, c;

    var char2, char3;

    out = "";

    len = str.length;

    i = 0;

    while(i < len) {

    c = str.charCodeAt(i++);

    switch(c >> 4)

    {

    case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:

    // 0xxxxxxx

    out += str.charAt(i-1);

    break;

    case 12: case 13:

    // 110x xxxx 10xx xxxx

    char2 = str.charCodeAt(i++);

    out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));

    break;

    case 14:

    // 1110 xxxx 10xx xxxx 10xx xxxx

    char2 = str.charCodeAt(i++);

    char3 = str.charCodeAt(i++);

    out += String.fromCharCode(((c & 0x0F) << 12) |

    ((char2 & 0x3F) << 6) |

    ((char3 & 0x3F) << 0));

    break;

    }

    }

    return out;

    }

    /* Copyright (C) 1999 Masanao Izumo

    * Version: 1.0

    * LastModified: Dec 25 1999

    * This library is free. You can redistribute it and/or modify it.

    */

    /*

    * Interfaces:

    * b64 = base64encode(data);

    * data = base64decode(b64);

    */

    var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    var base64DecodeChars = new Array(

    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,

    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,

    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,

    52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,

    -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,

    15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,

    -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,

    41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);

    function base64encode(str) {

    var out, i, len;

    var c1, c2, c3;

    len = str.length;

    i = 0;

    out = "";

    while(i < len) {

    c1 = str.charCodeAt(i++) & 0xff;

    if(i == len)

    {

    out += base64EncodeChars.charAt(c1 >> 2);

    out += base64EncodeChars.charAt((c1 & 0x3) << 4);

    out += "==";

    break;

    }

    c2 = str.charCodeAt(i++);

    if(i == len)

    {

    out += base64EncodeChars.charAt(c1 >> 2);

    out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));

    out += base64EncodeChars.charAt((c2 & 0xF) << 2);

    out += "=";

    break;

    }

    c3 = str.charCodeAt(i++);

    out += base64EncodeChars.charAt(c1 >> 2);

    out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));

    out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >>6));

    out += base64EncodeChars.charAt(c3 & 0x3F);

    }

    return out;

    }

    function base64decode(str) {

    var c1, c2, c3, c4;

    var i, len, out;

    len = str.length;

    i = 0;

    out = "";

    while(i < len) {

    /* c1 */

    do {

    c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff];

    } while(i < len && c1 == -1);

    if(c1 == -1)

    break;

    /* c2 */

    do {

    c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff];

    } while(i < len && c2 == -1);

    if(c2 == -1)

    break;

    out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));

    /* c3 */

    do {

    c3 = str.charCodeAt(i++) & 0xff;

    if(c3 == 61)

    return out;

    c3 = base64DecodeChars[c3];

    } while(i < len && c3 == -1);

    if(c3 == -1)

    break;

    out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2));

    /* c4 */

    do {

    c4 = str.charCodeAt(i++) & 0xff;

    if(c4 == 61)

    return out;

    c4 = base64DecodeChars[c4];

    } while(i < len && c4 == -1);

    if(c4 == -1)

    break;

    out += String.fromCharCode(((c3 & 0x03) << 6) | c4);

    }

    return out;

    }

    var str = '严';

    var sEncoded=base64encode(utf16to8(str));

    console.log(sEncoded);

    b6c494739269bbcf6062f4348b83cbbe.gif

    文件编码无论是utf-8或者gbk编码,输出的都是5Lil。注意文件编码和网页编码需要统一。

    3、base64编码原理

    所谓Base64,就是说选出64个字符----小写字母a-z、大写字母A-Z、数字0-9、符号"+"、"/"(再加上作为垫字的"=",实际上是65个字符)----作为一个基本字符集。然后,其他所有符号都转换成这个字符集中的字符。它是用64个可打印字符表示二进制所有数据方法,这64个字符,对应表如下:

    81df86183fb1ed2db0d199bb87ed78ed.png

    具体来说,转换方式可以分为四步。

    第一步,将每三个字节作为一组,一共是24个二进制位。

    第二步,将这24个二进制位分为四组,每个组有6个二进制位。

    第三步,在每组前面加两个00,扩展成32个二进制位,即四个字节。

    第四步,根据上表,得到扩展后的每个字节的对应符号,这就是Base64的编码值。

    因为,Base64将三个字节转化成四个字节,因此Base64编码后的文本,会比原文本大出三分之一左右。

    举一个具体的实例,演示英语单词Man如何转成Base64编码。

    Text content

    M

    a

    n

    ASCII

    77

    97

    110

    Bit pattern

    0

    1

    0

    0

    1

    1

    0

    1

    0

    1

    1

    0

    0

    0

    0

    1

    0

    1

    1

    0

    1

    1

    1

    0

    Index

    19

    22

    5

    46

    Base64-Encoded

    T

    W

    F

    u

    第一步,"M"、"a"、"n"的ASCII值分别是77、97、110,对应的二进制值是01001101、01100001、01101110,将它们连成一个24位的二进制字符串010011010110000101101110。

    第二步,将这个24位的二进制字符串分成4组,每组6个二进制位:010011、010110、000101、101110。

    第三步,在每组前面加两个00,扩展成32个二进制位,即四个字节:00010011、00010110、00000101、00101110。它们的十进制值分别是19、22、5、46。

    第四步,根据上表,得到每个值对应Base64编码,即T、W、F、u。

    因此,Man的Base64编码就是TWFu。

    如果字节数不足三,则这样处理:

    a)二个字节的情况:将这二个字节的一共16个二进制位,按照上面的规则,转成三组,最后一组除了前面加两个0以外,后面也要加两个0。这样得到一个三位的Base64编码,再在末尾补上一个"="号。

    比如,"Ma"这个字符串是两个字节,可以转化成三组00010011、00010110、00010000以后,对应Base64值分别为T、W、E,再补上一个"="号,因此"Ma"的Base64编码就是TWE=

    b)一个字节的情况:将这一个字节的8个二进制位,按照上面的规则转成二组,最后一组除了前面加二个0以外,后面再加4个0。这样得到一个二位的Base64编码,再在末尾补上两个"="号。

    比如,"M"这个字母是一个字节,可以转化为二组00010011、00010000,对应的Base64值分别为T、Q,再补上二个"="号,因此"M"的Base64编码就是TQ==

    再举一个中文的例子,汉字"严"如何转化成Base64编码?

    这里需要注意,汉字本身可以有多种编码,比如gb2312、utf-8、gbk等等,每一种编码的Base64对应值都不一样。下面的例子以utf-8为例。

    首先,"严"的utf-8编码为E4B8A5,写成二进制就是三字节的"11100100 10111000 10100101"。将这个24位的二进制字符串,按照第3节中的规则,转换成四组一共32位的二进制值"00111001 00001011 00100010 00100101",相应的十进制数为57、11、34、37,它们对应的Base64值就为5、L、i、l。

    所以,汉字"严"(utf-8编码)的Base64值就是5Lil。

    源码地址:http://git.oschina.net/kjr/kangjianrong_public/tree/master/base64?dir=1&filepath=base64&oid=cf9a5a3d26e59e9312ecb91788a895f5b1880703&sha=700c885e658ffda59bfa7aa8ba2de07fe240d246

    参考:http://www.ruanyifeng.com/blog/2008/06/base64.html

    展开全文
  • BS64+UTF8加密编码解码解密(2011-06-23 10:35:54)//1. BS64 加密 + utf-8 编码 2. 解码的时候, 先utf8 在base64 解密try {String name = "董沅宁";sun.misc.BASE64Encoder bs64en = new sun.misc.BASE64Encoder();...
  • 加密解密UTF8编码的BASE64串 无 GOCREATE FUNCTION [dbo].[c_GetUTF8Code] ( @char Nchar )RETURNS intAS--UTF8转码BEGIN Declare @Code int Select @Code=Cast(Unicode(@char) as int) Declare @Utf8Code int Set @...
  • 复制my-default.ini文件命名为my.ini内容如下[client]port=3306default-character-set=utf8[mysqld]port=3306character_set_server=utf8basedir=C:\mysql\mysql-5.6.14-winx64#解压目录datadir=C:\mysql\mysql-...
  • 本文实例讲述了JS实现对中文字符串进行utf-8的Base64编码的方法。分享给大家供大家参考,具体如下:要进行编码的字符串:“select 用户名 from 用户”使用JAVA进行编码,Java程序:String sql = "select 用户名 from...
  • mysql原有utf8的问题 UTF-8 编码是一种变长的编码机制,可以用1~4个字节存储字符。 但MySQL 中的 utf8 编码并不是真正的 UTF-8,其最长只有3个字节。当遇到占4个字节的 UTF-8 编码,例如 emoji 字符或者复杂的汉字,...
  • 其解密流程为:BASE64.decode(ZIP 解压缩(UTF-8转码)) 其中的ZIP压缩实际为GZip压缩,两者的压缩方式稍有不同,使用Delphi在解压时就需要不同的方法来处理。 查找了各种资料,最终确定使用zipLibEx的源码包+搜索的...
  • 我们有一个通信协议,要求我们对Base64编码UTF-16编码密码的SHA1哈希值。我们已经获得了Java,javascript和visual basic示例,但是我们在Linux(redhat)下运行提供的测试字符串:TESTED@8691最终输出:rBbBKqbJodT5...
  • 一次可连续输入64个字符;编码也是连续输入,但需注意UTF-16/32的字节顺序标记(BOM),如果没有提供BOM,默认以大尾序解码。Unicode 是容纳世界所有文字符号的国际标准编码,使用四个字节为每个字符...
  • 1.一般来说MySQL(小于5.5.3)字符集设置为utf8,指定连接的字符集也为utf8,django中save unicode string是木有问题的。但是,当字符串中有特殊字符(如emoji表情符号,以及其他凡是转成utf8要占用4字节的字符),就会...
  • 我实际上是以UTF-8格式存储在DB中的资源。但是现在我想将它们全部转换为UTF-16。由于德语有一些字符,如1/4。现在我想避免这些。我试着跟着声明,但得到了一些框中的结果字符串....utf-8到utf-16在oracle中的转换>...
  • mysql utf8改utf8mb4

    2021-01-19 15:02:14
    由于需要用到utf8mb4,之前是utf8现在给改成utf8mb4查看当前环境SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';+--------------------------+-----------------...
  • byte以及UTF-8的转码规则

    千次阅读 2021-02-12 17:52:34
    (ASCII包含的字符少,GBK等包含的中文在ascii表示不了,所以有UTF) BASE64就是将这些二进制数据转换成64个定义好的ASCII字符,一方面可以传输,一方面可以也可见,比如XML里加入二进制图片持久化,就是用 BASE64 ...
  • 【MySQL】数据库的存储引擎、字符集、校验规则(InnoDB、utf8、utf8mb4) 文章目录【MySQL】数据库的存储引擎、字符集、校验规则(InnoDB、utf8、utf8mb4)一、SQL语言的分类二、存储引擎2.1 查看存储引擎2.2 事务三、...
  • python读取文件时,抛异常:'utf-8' codec can't decode byte 0x80 in position 64: invalid start byte 解决办法 读取文件时,以二进制文件读取 # 正确 open(file=file_full_name, mode='rb') # 抛异常 open(file=...
  • 由于需要用到utf8mb4,之前是utf8现在给改成utf8mb4查看当前环境SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';+--------------------------+-----------------...
  • UTF8其实和Unicode是同类,就是在编码方式上不同!首先UTF8编码后的大小是不一定,不像Unicode编码后的大小是一样的!我们先来看Unicode的编码:一个英文字母 “a” 和 一个汉字 “好”,编码后都是占用的空间大小是...
  • mysql编码使用utf8mb4

    2021-03-03 19:28:59
    MySQL在 5.5.3 之后增加了 utf8mb4 字符编码,mb4即 most bytes 4。简单说 utf8mb4 是 utf8 的超集并完全兼容utf8,能够用四个字节存储更多的字符。(查看mysql版本: select version();)utf8mb4与utf8的区别:1、...
  • mysql数据库charset=utf-8

    2021-01-19 04:52:43
    关于mysql数据库charset=utf-8的搜索结果回答按照下面几个措施,保证MySQL的输入输出没有乱码:1 Python文件设置编码 utf-8 (文件前面加上 #encoding=utf-8)2 MySQL数据库charset=utf-83 Python连接MySQL是加上参数 ...
  • desc "Database related tasks"namespace :database dodesc "Convert to utf8mb4"task convert_to_utf8mb4: :environment doconnection = ActiveRecord::Base.connectiondatabase = connection.curre...
  • MySQL中utf-8和utf8到底有啥区别 MySQL中,编码格式一直是写"utf8",而不是"utf-8"。 我最近在学Mybatis的时候,会遇到这样的错误: ### Error building SqlSession. ### Cause: org.apache.ibatis.builder....
  • return "\xC3".chr(ord($captures[3])-64); } } preg_replace_callback($regex, "utf8replacer", $text); 编辑: !empty(x)将匹配非空值("0"被视为空)。 x != ""将匹配非空值,包括"0"。 x !== ""将匹配除以外的...
  • utf8mb4 和 utf8 比较utf8mb4: A UTF-8 encoding of the Unicode character set using one to four bytes per character.utf8mb3: A UTF-8 encoding of the Unicode character set using one to three bytes per ...
  • 根据以下规则,UTF8中的字符长度可以为1到4个字节:对于1字节字符,第一位为0,后跟其unicode码。对于n字节字符,前n位全为1,n + 1位为0,其后为n-1个字节,其中最高有效2位为10。这是UTF-8编码的工作方式:字符。...
  • 在c中读取UTF-16文件

    2021-05-25 04:42:53
    我正在尝试读取具有BOM的UTF-16LE编码的文件.我试过这段代码#include #include #include #include int main() {std::wifstream fin("/home/asutp/test");fin.imbue(std::locale(fin.getloc(), new std::codecvt_utf...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 569,169
精华内容 227,667
关键字:

utf64