使用 T-SQL 实现 base64 解码
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 解码相关推荐
- base64 解码
在ecplise上运行的好好的,但是到服务器上发现base64解码不正确,出现了乱码的现象 程序代码如下: new String(Base64.decode(infreturn.getReturnSt ...
- 做个游戏 writeup base64解码网址
下载得到一个 jar 包,用 JD-GUI 打开 RGFqaURhbGlfSmlud2FuQ2hpamk= --> base64解码 --> flag{DajiDali_J ...
- //BASE64解码成File文件
//BASE64解码成File文件public static void base64ToFile(String base64, String destPath,String fileName) {Fi ...
- php如何解码图片,php基于base64解码图片与加密图片还原实例_PHP
本文实例讲述了php基于base64解码图片与加密图片还原的实现方法.分享给大家供大家参考.具体实现方法如下: 本例中$data是一段经过base64编码的图片.具体代码如下: 代码如下: //文件名 ...
- des加密+base64编码,base64解码+des解密
des加密+base64编码,base64解码+des解密 des简单介绍 base64简单介绍 运行效果图 TestActivity.java DataEncryptionUtil.java des ...
- 前端DES加密、base64编码,后端DES解密、base64解码
项目场景: 在系统开发的过程中有的时候,我们为了数据的安全性会把前端的数据进行加密,然后再在后端程序中对加密数据进行解密或解密,今天我们就在这里说2种简单的方法(DES加密.base64编码) 具体实 ...
- js base64解码JWT失败:VM273:1 Uncaught DOMException: Failed to execute 'atob' on 'Window': The string to
前端获取后端服务生成JWT,利用js方法base64解码payload段: window.atob("eyJzdWIiOiJ0ZXN0MyIsInVzZXJJZCI6IjEwMTY5MiIs ...
- Android Base64解码失败问题
一.现象描述 在开发过程中遇到了base64解码失败问题,ios和Android同时调用上传人脸数据,通过拍照拿到图片信息再装成base64字符串传给后台,此时发现ios上传的图片没有问题,Andro ...
- C#:base64解码显示
1.概述 前段时间,因为项目需要,需要方便对base64解码后的数据查看,网上找了一通,只有解码编码,但没有方便进行结构解析的.于是自己写了一个. 2.代码 解码分析 void btn_decode_ ...
- Base64解码过程必须关注的问题
背景 这两天开发工作中,需要运用 Base64来进行数据的编解码.使用 Cryptopp库的 base64(网络上其他基于Boost 的 BIO)都会出现解码出来的字节数只是其中很少的一部分,具体编码 ...
最新文章
- Linux 永久挂载(mount)
- Quartz在Spring中动态设置cronExpression
- 代码UITableView点击cell跳转
- 查找字段 如何 过滤
- 3085 吃遍赴丝码(分治)
- cpanel java_Cpanel是什么
- java基础9(IO流)-File类
- 旋钮编码器c代码_电机编码器故障检修,其实跟编码器没有关系
- 浏览器自动打开html怎么办,浏览器自动弹出网页怎么处理?开机自动弹出垃圾网页如何解决?...
- 【分享】外卖优惠券怎么弄微信返利公众号系统的流程和方法
- 智慧灯杆解决方案之智慧景区建设
- windows系统常用命令
- 真的不明白,怎么会这样!
- Python学习-Scipy库稀疏矩阵的建立(面向列的稀疏矩阵、基于坐标格式的稀疏矩阵)
- TOEFL口语模板--小站
- 物理学专业英语(词汇整理)--------07
- 大数据实战项目之电商数仓(一)
- Python 课课练 (六):列表、元组课后练习题
- struts2系列(二):struts2参数传递错误、struts2的输入错误验证
- 3+1+2模式excel学生成绩分析模板探讨