精华内容
下载资源
问答
  • https://www.yuque.com/fanyuwin/gp25f9/rne5dl

    https://www.yuque.com/fanyuwin/gp25f9/rne5dl

    展开全文
  • 图片BASE64加密保存到数据库Blob类型中(放入数据库,并取出生成图片),完整的demo例子,可运行。
  • 概述 由于业务需要,数据库中的某张表数据是使用Base64编码存储的,写入数据需要编码,取值时需要解码。...MySQL为我们提供了TO_BASE64函数进行Base64编码 INSERT INTO tbl_order (id, content) VALUES(0, TO

    原文链接:https://blog.wanvale.com/archives/427/

    概述

    由于业务需要,数据库中的某张表数据是使用Base64编码存储的,写入数据需要编码,取值时需要解码。
    如果只为了存取数据,可以在业务层进行编码解码,但实际需求中是需要对数据进行条件查询的,所以这部分条件查询的解码就需要放到MySQL中进行。

    基础操作

    编码

    MySQL为我们提供了TO_BASE64函数进行Base64编码

    INSERT INTO tbl_order (id, content) VALUES(0, TO_BASE64 ('sometext'))
    

    解码

    解码也只需要调用FROM_BASE64函数

    SELECT FROM_BASE64(content) FROM tbl_order
    

    条件查询中也可以使用

    SELECT id FROM tbl_order WHERE content = TO_BASE64("2021年8月20日")
    

    乱码处理

    如果在业务层进行BASE64编码并指定编码格式为UTF-8或其他格式,再进行查询就会出现乱码的问题
    1.png

    此时就需要使用CAST函数转换格式

    SELECT CAST(FROM_BASE64(content) AS CHAR CHARACTER SET utf8 ) FROM tbl_order
    

    问题即可解决
    2.png

    展开全文
  • MySQL 中的 base64 函数

    万次阅读 2016-03-25 15:35:36
    MySQL在5.6版本的时候增加了to_base64和from_base64函数,在此之前没有内部函数,只能使用User-Defined-Function。 本文分别介绍这两种方式下base64函数的使用。

    MySQL在5.6版本的时候增加了to_base64from_base64函数,在此之前没有内部函数,只能使用User-Defined-Function。
    本文分别介绍这两种方式下base64函数的使用。


    1. 5.6版本及之后的版本的base64

    主要就是两个MySQL内部函数to_base64from_base64,使用也很简单,如下:

    mysql> select version();
    +-----------+
    | version() |
    +-----------+
    | 5.7.11    |
    +-----------+
    1 row in set (0.00 sec)
    
    mysql> select to_base64('helloworld');
    +-------------------------+
    | to_base64('helloworld') |
    +-------------------------+
    | aGVsbG93b3JsZA==        |
    +-------------------------+
    1 row in set (0.00 sec)
    
    mysql> select from_base64('aGVsbG93b3JsZA==');
    +---------------------------------+
    | from_base64('aGVsbG93b3JsZA==') |
    +---------------------------------+
    | helloworld                      |
    +---------------------------------+
    1 row in set (0.00 sec)
    
    mysql> 

    2. 5.6之前的版本

    由于之前版本MySQL没有与base64相关的函数,就有了很多用户自己实现了这两个函数base64_encodebase64_decode,下面是一个比较好的实现(http://www.cybercanibal.com/articulos-tecnicos/experiencia-tecnica/115-mysql-url-base64-encode-decode-function):

    -- base64.sql - MySQL base64 encoding/decoding functions
    -- Copyright (C) 2006 Ian Gulliver
    -- 
    -- This program is free software; you can redistribute it and/or modify
    -- it under the terms of version 2 of the GNU General Public License as
    -- published by the Free Software Foundation.
    -- 
    -- This program is distributed in the hope that it will be useful,
    -- but WITHOUT ANY WARRANTY; without even the implied warranty of
    -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -- GNU General Public License for more details.
    -- 
    -- You should have received a copy of the GNU General Public License
    -- along with this program; if not, write to the Free Software
    -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    
    delimiter |
    
    DROP TABLE IF EXISTS input_pentaho_bod.base64_data |
    CREATE TABLE base64_data (c CHAR(1) BINARY, val TINYINT) |
    INSERT INTO base64_data VALUES 
        ('A',0), ('B',1), ('C',2), ('D',3), ('E',4), ('F',5), ('G',6), ('H',7), ('I',8), ('J',9),
        ('K',10), ('L',11), ('M',12), ('N',13), ('O',14), ('P',15), ('Q',16), ('R',17), ('S',18), ('T',19),
        ('U',20), ('V',21), ('W',22), ('X',23), ('Y',24), ('Z',25), ('a',26), ('b',27), ('c',28), ('d',29),
        ('e',30), ('f',31), ('g',32), ('h',33), ('i',34), ('j',35), ('k',36), ('l',37), ('m',38), ('n',39),
        ('o',40), ('p',41), ('q',42), ('r',43), ('s',44), ('t',45), ('u',46), ('v',47), ('w',48), ('x',49),
        ('y',50), ('z',51), ('0',52), ('1',53), ('2',54), ('3',55), ('4',56), ('5',57), ('6',58), ('7',59),
        ('8',60), ('9',61), ('+',62), ('/',63), ('=',0) |
    
    
    DROP FUNCTION IF EXISTS input_pentaho_bod.BASE64_DECODE |
    CREATE FUNCTION BASE64_DECODE (input BLOB)
        RETURNS BLOB
        CONTAINS SQL
        DETERMINISTIC
        SQL SECURITY INVOKER
    BEGIN
        DECLARE ret BLOB DEFAULT '';
        DECLARE done TINYINT DEFAULT 0;
    
        IF input IS NULL THEN
            RETURN NULL;
        END IF;
    
    each_block:
        WHILE NOT done DO BEGIN
            DECLARE accum_value BIGINT UNSIGNED DEFAULT 0;
            DECLARE in_count TINYINT DEFAULT 0;
            DECLARE out_count TINYINT DEFAULT 3;
    
    each_input_char:
            WHILE in_count < 4 DO BEGIN
                DECLARE first_char CHAR(1);
    
                IF LENGTH(input) = 0 THEN
                    RETURN ret;
                END IF;
    
                SET first_char = SUBSTRING(input,1,1);
                SET input = SUBSTRING(input,2);
    
                BEGIN
                    DECLARE tempval TINYINT UNSIGNED;
                    DECLARE error TINYINT DEFAULT 0;
                    DECLARE base64_getval CURSOR FOR SELECT val FROM base64_data WHERE c = first_char;
                    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET error = 1;
    
                    OPEN base64_getval;
                    FETCH base64_getval INTO tempval;
                    CLOSE base64_getval;
    
                    IF error THEN
                        ITERATE each_input_char;
                    END IF;
    
                    SET accum_value = (accum_value << 6) + tempval;
                END;
    
                SET in_count = in_count + 1;
    
                IF first_char = '=' THEN
                    SET done = 1;
                    SET out_count = out_count - 1;
                END IF;
            END; END WHILE;
    
            -- We've now accumulated 24 bits; deaccumulate into bytes
    
            -- We have to work from the left, so use the third byte position and shift left
            WHILE out_count > 0 DO BEGIN
                SET ret = CONCAT(ret,CHAR((accum_value & 0xff0000) >> 16));
                SET out_count = out_count - 1;
                SET accum_value = (accum_value << 8) & 0xffffff;
            END; END WHILE;
    
        END; END WHILE;
    
        RETURN ret;
    END |
    
    DROP FUNCTION IF EXISTS input_pentaho_bod.BASE64_ENCODE |
    CREATE FUNCTION BASE64_ENCODE (input BLOB)
        RETURNS BLOB
        CONTAINS SQL
        DETERMINISTIC
        SQL SECURITY INVOKER
    BEGIN
        DECLARE ret BLOB DEFAULT '';
        DECLARE done TINYINT DEFAULT 0;
    
        IF input IS NULL THEN
            RETURN NULL;
        END IF;
    
    each_block:
        WHILE NOT done DO BEGIN
            DECLARE accum_value BIGINT UNSIGNED DEFAULT 0;
            DECLARE in_count TINYINT DEFAULT 0;
            DECLARE out_count TINYINT;
    
    each_input_char:
            WHILE in_count < 3 DO BEGIN
                DECLARE first_char CHAR(1);
    
                IF LENGTH(input) = 0 THEN
                    SET done = 1;
                    SET accum_value = accum_value << (8 * (3 - in_count));
                    LEAVE each_input_char;
                END IF;
    
                SET first_char = SUBSTRING(input,1,1);
                SET input = SUBSTRING(input,2);
    
                SET accum_value = (accum_value << 8) + ASCII(first_char);
    
                SET in_count = in_count + 1;
            END; END WHILE;
    
            -- We've now accumulated 24 bits; deaccumulate into base64 characters
    
            -- We have to work from the left, so use the third byte position and shift left
            CASE
                WHEN in_count = 3 THEN SET out_count = 4;
                WHEN in_count = 2 THEN SET out_count = 3;
                WHEN in_count = 1 THEN SET out_count = 2;
                ELSE RETURN ret;
            END CASE;
    
            WHILE out_count > 0 DO BEGIN
                BEGIN
                    DECLARE out_char CHAR(1);
                    DECLARE base64_getval CURSOR FOR SELECT c FROM base64_data WHERE val = (accum_value >> 18);
    
                    OPEN base64_getval;
                    FETCH base64_getval INTO out_char;
                    CLOSE base64_getval;
    
                    SET ret = CONCAT(ret,out_char);
                    SET out_count = out_count - 1;
                    SET accum_value = accum_value << 6 & 0xffffff;
                END;
            END; END WHILE;
    
            CASE
                WHEN in_count = 2 THEN SET ret = CONCAT(ret,'=');
                WHEN in_count = 1 THEN SET ret = CONCAT(ret,'==');
                ELSE BEGIN END;
            END CASE;
    
        END; END WHILE;
    
        RETURN ret;
    END |
    delimiter ;

    使用也非常简单:

    mysql> select version();
    +------------+
    | version()  |
    +------------+
    | 5.5.45-log |
    +------------+
    1 row in set (0.00 sec)
    
    mysql> select base64_encode('helloworld');
    +-----------------------------+
    | base64_encode('helloworld') |
    +-----------------------------+
    | aGVsbG93b3JsZA==            |
    +-----------------------------+
    1 row in set (0.00 sec)
    
    mysql> select base64_decode('aGVsbG93b3JsZA==');
    +-----------------------------------+
    | base64_decode('aGVsbG93b3JsZA==') |
    +-----------------------------------+
    | helloworld                        |
    +-----------------------------------+
    1 row in set (0.00 sec)
    
    mysql> 

    3. 性能评估

    UDF的性能比native function的性能差上90-100倍,其实还有一种方式[C版本的的UDF](http://bugs.mysql.com/file.php?id=3294&bug_id=18861),C版本的的UDF在性能上没有问题,但是也会存在部署和移植的问题,所幸的是在新版本的MySQL(5.6+)中已经有了这两个函数to_base64from_base64


    ref:

    http://stackoverflow.com/questions/358500/base64-encode-in-mysql
    http://lists.mysql.com/internals/37665
    http://www.cybercanibal.com/articulos-tecnicos/experiencia-tecnica/115-mysql-url-base64-encode-decode-function
    http://dev.mysql.com/doc/refman/5.6/en/string-functions.html#function_to-base64
    http://dev.mysql.com/doc/refman/5.6/en/string-functions.html#function_from-base64

    展开全文
  • mysqlBase64编码与解码

    万次阅读 2017-06-25 10:35:21
    mysql中,有些数据我们不想让别人直观的看到,这时可以使用Base编码与解码。 mysql提供了相关的函数支持。 1、to_base64 编码 如: select to_base64('12345'); 2、from_base64 解码 如:select from_base64...

    在mysql中,有些数据我们不想让别人直观的看到,这时可以使用Base编码与解码。

    mysql提供了相关的函数支持。

    1、to_base64  编码

    如:  select to_base64('12345');

    2、from_base64 解码

    如:select from_base64('MTIzNDU=');


    展开全文
  • 1、to_base64 编码 select to_base64('12345'); 编码结果:MTIzNDU= 2、from_base64 解码 select from_base64('MTIzNDU='); 解码结果:123456 3、加密 select to_base64(AES_ENCRYPT('123456','abcde')); 加密...
  • 微信小程序base64加密,AES加密,亲测过是可以使用的,推荐下载,正常项目完美运行,完美运行,完美运行,重要事情说三遍
  • 经过Base64加密后字符的长度变化

    万次阅读 2016-09-14 14:21:16
    mysql要对字段长度进行限制,需要知道原文本长度与base64加密后文本长度的比例。所谓Base64,就是说选出64个字符—-小写字母a-z、大写字母A-Z、数字0-9、符号”+”、”/”作为基本基础集的编码方式。base
  • 字符Base64加密后的长度变化

    千次阅读 2016-10-29 17:11:02
    MySQL要对字段长度进行限制,需要知道原文本长度与base64加密后文本长度的比例。 所谓Base64,就是说选出64个字符—-小写字母a-z、大写字母A-Z、数字0-9、符号”+”、”/”作为基本基础集的编码方式。 base64加密...
  • 这些信息在oracle数据库中都保存在类型BLOB中,放入前可以进行信息的加密BASE64)。 例如:oracle中新建表TEACHER Demo: /** * 数据库中加入图片等文件 */ public static void InsertPic() { ...
  • // base64加密开始 var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; function base64encode(str) { console.log("base64加密开始") var out, i, len; var c1, c2...
  • 我采用的就是简单Base64对文件进行加密,当然,有人说java是可以反编译的,对,没错,我们只防君子,不能防小人。 所以,我要做的事情是Base64对MyBatis的数据源进行加密. 那么,整理下思路,我要做的工作,...
  • 阿里巴巴招聘中学习BASE64加密解密

    千次阅读 2018-01-08 14:02:41
    sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder(); bytes = decoder.decodeBuffer(str); } catch (IOException e) { e.printStackTrace(); } return bytes; } 然后输出内容: ۽���q�...
  • 实际开发过程中,我们可以使用MysqlBase64编码与解码来保存加密数据。 第一种 这种方式是直接编码保存,这种方式只能保证数据库不是明文保存数据,加密作用不大。 插入密文数据: insert into tableName ('name','...
  • MD5加密base64及MD5加密

    千次阅读 2018-04-25 18:10:57
    1、MD5加密+Base64加密两种方式: 方式一: #region MD5+Base64加密 方式一 public static string GetMd5HashBytes(string input, Encoding encodeType) { System.Security.Cryptography.MD5 mD = Sys...
  • 严格地说,如果您当前正在将Base64用于一些用户可见的字符串(例如URL),并且想添加一些额外的功能,则Emojicode可能会有用。 因为谁愿意要看到mysite.ex/cG9zdCBhZXN0aGV0aWNz在网址栏时,他们可以看到mysite....
  • base64加盐算法

    千次阅读 2018-09-06 14:22:50
    package com.rd.p2p.common.util... import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.Random;...import com.rd.p2p.common.util.code.BASE64Decoder; import com.rd.p...
  • 判断一个字符串是否经过了base64_encode加密 遇到这样一个问题,之前就是将字符串先解密再加密,判断所得的字符串是否是之前的那个 此方法在如下情况下无效: 当字符串没有加密,并且此字符串与其它某字符串加密...
  • 由于需求要将上传的文件以BASE64的方式保存到MySQL的Blob字段,并可以读取Blob字段下载生成文件,方法如下: 1、下载用于BASE64编码转换的sun.misc.BASE64Decoder和sun.misc.BASE64Encoder的支持库(jar),放到运行...
  • 报错:java.lang.IllegalArgumentException: Illegal base64 character 20 原因:base64编码时使用加号,在URL传递时加号会被当成空格让base64字符串更改,服务器端解码出错 解决方案: 对字符串处理,把空格更...
  • base64加密出现的\r\n换行问题 base64一行不能超过76字符,超过则添加回车换行符。 如果在不改变原有的加密算法里,可以在外层写入 string **=encodeString.replaceAll("[\s\t\n\r]", “”); 去掉所有的\r\n 如果想...
  • 使用Base64进行string的加密和解密   //字符串转bytes var ebytes = System.Text.Encoding.Default.GetBytes(keyWord); //bytes进行base64加密 var strBase64 = Convert.ToBase64String(ebytes); //base...
  • typescript---base64实现

    2020-11-29 00:13:31
    typescript---base64
  • 今日再进行完成报表查询的时候,应公司要求,对客户信息全部加密,包括客户姓名,客户身份证,客户手机号。然后放到报表工具中查询,因为报表工具对提交的SQL进行加工,在最外层会加一个select * form ( 你的SQL ) t...
  • 原文:base64编码踩坑之身份证号模糊查询 首先将我在项目中遇到的坑挖出来。在我们的项目中有这样的一个需求就是对于用户的身份证号在数据库中存储的时候不能是明文存储。鉴于这样的一个需求,很自然的我们就想到...
  • 1 执行要查询的sql,查看在数据库中运行是否乱码。如果乱码,修改自己数据库的编码 2 如果查询sql没有乱码。...则 用 CONVERT(from_base64(username),CHAR) 就可以保证在mybatis中查询不会乱码 ...
  • SQL注入基础:9.base64注入

    千次阅读 2018-10-24 15:33:49
    base64注入是针对传递的参数被base64加密后的注入点进行注入。这种方式常用来绕过一些WAF的检测。 1)判断是否存在注入 使用Burp的Decoder模块对参数进行base64编码,如下所示: id=1,id=1’,id=1 and 1=1,id=...
  • 是这样的 我发送了一个个体请求 服务器给我的响应是一个json 其中有一个明显是用base64加密后的结果 于是我就用base64解密 本来结果应该是中文字符串的 但是我这边显示的却是乱码 请问是为什么 是还作了什么处理吗?...
  • 有些业务场景,数据库中的敏感数据需要存储为密文形式,这里使用mysql内置加密函数对数据进行加密。 2 加密算法 对称加密算法:AES 加密后数据转换为:十六进制 3 内置函数说明 函数 说明 AES_ENCRYPT(字符...
  • 图片存取功能(支持mysql,oracle,sqlserver)完整的demo例子,可运行。mysql(longblob、blob),oracle(BLOB),SQLSERVER(varbinary(MAX))

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,325
精华内容 7,730
关键字:

mysqlbase64加密

mysql 订阅