IF OBJECT_ID(N'dbo.f_base64_decode') IS NOT NULL
    DROP FUNCTION dbo.f_base64_decode;
GO

/*-- == base64 解码=================================
    在SQL Server 中,使用FOR XML 生成xml 实例时,binary 数据
使用base64 编码,而解释xml 的时候,却没有相应的解码方法。
    使用此函数可以解决这个问题
   
    Base64 编码把个位字节(*8=24)转化为个位的字节(*6=24)
之后在位的前面补两个,形成位一个字节的形式。用下面的个字符重新
表示:“ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/”
    如果输入的数据的长度不是的倍数,则编码结果的不足部分用等号“=”
补足。
 
---------------------------------------------------------
-- 调用示例
 
    SELECT -- 还原成字符串
       v1 = CONVERT(varchar(max), v1),
       v2 = CONVERT(nvarchar(max), v2)
    FROM(
       SELECT  -- 解码base64 编码
           v1 = dbo.f_base64_decode(v1),
           v2 = dbo.f_base64_decode(v2)
       FROM(  -- 通过for xml 生成base64 编码
           SELECT
             v1 = (SELECT CONVERT(varbinary(max), 'base64 test') FOR XML PATH(''), TYPE).value('/', 'nvarchar(max)'),
              v2 = (SELECT CONVERT(varbinary(max), N'base64 解码测试') FOR XML PATH(''), TYPE).value('/', 'nvarchar(max)')
       )DATA
    )A
 
---------------------------------------------------------
-- 环境要求
 
适用于sql server 2005 或者更高的版本

-- ==== 邹建.02(引用请保留此信息) =============== */
CREATE FUNCTION dbo.f_base64_decode(
    @input varchar(max)
)RETURNS varbinary(max)
AS
BEGIN
    DECLARE
       @base64 char(64),
       @pos int,
       @len int,
       @output varbinary(max);
 
    SELECT
       @base64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',
       @pos = 1,
       @len = LEN(@input),
       @output = 0x;
 
    IF @input = ''
       RETURN 0x;
 
    IF @len % 4 > 0 OR @len IS NULL
       RETURN NULL;
      
    WHILE @pos < @len
    BEGIN
       SELECT
           @output = @output
              + CONVERT(binary(1), ((v1 & 63) * 4 ) | ((v2 & 48) / 16))
              + CONVERT(binary(1), ((v2 & 15) * 16) | ((v3 & 60) / 4 ))
              + CONVERT(binary(1), ((v3 & 3 ) * 64) | ((v4 & 63) / 1 )),
           @pos = @pos + 4
       FROM(
           SELECT
              v1 = CHARINDEX(SUBSTRING(@input, @pos + 0, 1) COLLATE Chinese_PRC_BIN, @base64) - 1,
              v2 = CHARINDEX(SUBSTRING(@input, @pos + 1, 1) COLLATE Chinese_PRC_BIN, @base64) - 1,
              v3 = CHARINDEX(SUBSTRING(@input, @pos + 2, 1) COLLATE Chinese_PRC_BIN, @base64) - 1,
              v4 = CHARINDEX(SUBSTRING(@input, @pos + 3, 1) COLLATE Chinese_PRC_BIN, @base64) - 1     
       )A;
    END;
 
    RETURN(SUBSTRING(@output, 1, @len / 4 * 3 - 3 + CHARINDEX('=', RIGHT(@input, 2) + '=')));
END;
GO

使用 T-SQL 实现 base64 解码相关推荐

  1. base64 解码

    在ecplise上运行的好好的,但是到服务器上发现base64解码不正确,出现了乱码的现象 程序代码如下: new String(Base64.decode(infreturn.getReturnSt ...

  2. 做个游戏 writeup base64解码网址

    下载得到一个  jar  包,用  JD-GUI  打开 RGFqaURhbGlfSmlud2FuQ2hpamk=  -->  base64解码  -->  flag{DajiDali_J ...

  3. //BASE64解码成File文件

    //BASE64解码成File文件public static void base64ToFile(String base64, String destPath,String fileName) {Fi ...

  4. php如何解码图片,php基于base64解码图片与加密图片还原实例_PHP

    本文实例讲述了php基于base64解码图片与加密图片还原的实现方法.分享给大家供大家参考.具体实现方法如下: 本例中$data是一段经过base64编码的图片.具体代码如下: 代码如下: //文件名 ...

  5. des加密+base64编码,base64解码+des解密

    des加密+base64编码,base64解码+des解密 des简单介绍 base64简单介绍 运行效果图 TestActivity.java DataEncryptionUtil.java des ...

  6. 前端DES加密、base64编码,后端DES解密、base64解码

    项目场景: 在系统开发的过程中有的时候,我们为了数据的安全性会把前端的数据进行加密,然后再在后端程序中对加密数据进行解密或解密,今天我们就在这里说2种简单的方法(DES加密.base64编码) 具体实 ...

  7. js base64解码JWT失败:VM273:1 Uncaught DOMException: Failed to execute 'atob' on 'Window': The string to

    前端获取后端服务生成JWT,利用js方法base64解码payload段: window.atob("eyJzdWIiOiJ0ZXN0MyIsInVzZXJJZCI6IjEwMTY5MiIs ...

  8. Android Base64解码失败问题

    一.现象描述 在开发过程中遇到了base64解码失败问题,ios和Android同时调用上传人脸数据,通过拍照拿到图片信息再装成base64字符串传给后台,此时发现ios上传的图片没有问题,Andro ...

  9. C#:base64解码显示

    1.概述 前段时间,因为项目需要,需要方便对base64解码后的数据查看,网上找了一通,只有解码编码,但没有方便进行结构解析的.于是自己写了一个. 2.代码 解码分析 void btn_decode_ ...

  10. Base64解码过程必须关注的问题

    背景 这两天开发工作中,需要运用 Base64来进行数据的编解码.使用 Cryptopp库的 base64(网络上其他基于Boost 的 BIO)都会出现解码出来的字节数只是其中很少的一部分,具体编码 ...

最新文章

  1. Linux 永久挂载(mount)
  2. Quartz在Spring中动态设置cronExpression
  3. 代码UITableView点击cell跳转
  4. 查找字段 如何 过滤
  5. 3085 吃遍赴丝码(分治)
  6. cpanel java_Cpanel是什么
  7. java基础9(IO流)-File类
  8. 旋钮编码器c代码_电机编码器故障检修,其实跟编码器没有关系
  9. 浏览器自动打开html怎么办,浏览器自动弹出网页怎么处理?开机自动弹出垃圾网页如何解决?...
  10. 【分享】外卖优惠券怎么弄微信返利公众号系统的流程和方法
  11. 智慧灯杆解决方案之智慧景区建设
  12. windows系统常用命令
  13. 真的不明白,怎么会这样!
  14. Python学习-Scipy库稀疏矩阵的建立(面向列的稀疏矩阵、基于坐标格式的稀疏矩阵)
  15. TOEFL口语模板--小站
  16. 物理学专业英语(词汇整理)--------07
  17. 大数据实战项目之电商数仓(一)
  18. Python 课课练 (六):列表、元组课后练习题
  19. struts2系列(二):struts2参数传递错误、struts2的输入错误验证
  20. 3+1+2模式excel学生成绩分析模板探讨

热门文章

  1. java考ccf_CCF考试试题之门禁系统java解题代码
  2. 怎么判断前轮左右的位置_老司机教你如何用方向盘,判断左右车轮位置,新手司机一看就会!...
  3. sort( )函数--R语言
  4. ReactNative之Image在Android设置圆角图片变形问题
  5. servlet详细理解
  6. MySql存储过程的操作
  7. LintCode_13 字符串查找
  8. 四则运算界面版 结对子
  9. 关于按钮背景透明 + div拖拽
  10. 用iptables实现NAT