`
sjk2013
  • 浏览: 2192771 次
文章分类
社区版块
存档分类
最新评论

使用 T-SQL 实现 base64 解码

 
阅读更多

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

分享到:
评论

相关推荐

    flink自定义函数-字符串BASE64解码,字符编码:HEX(16进制,不编码)

    2. 对字符串进行BASE64解码,字符串内容是十六进制,字符不编码 3. flinksql进行调用 4. 自定义函数调用过程 4.1. 编译打包代码,生成的jar复制到flink安装目录下的lib目录。 例如:/flink/lib 4.2. flinksql脚本...

    base64 编码与解码 中文完美支持

    完美支持中文 base64 编码与解码 目前速度最快 效率最高的编码与解码

    Oracle bolb转换Base64 CLOB.txt

    Oracle slq bolb转换Base64 CLOB

    密码解码工具Linux----CaptfEncoder-win-x64-2.1.0

    编码转换包括:Ascii 编码,Base64、Base 系列编码,Escape 编码,Hex 编码, Html entity 编码,莫尔斯电码,Quoted-printable(可打印字符引用编码),Shellcode 编码,Sql 编码,Tap Code(敲击码),Unicode ...

    VB C# 图片 文字 加密 解密 base64

    VB C# 图片 文字 加密 解密 base64VB C# 图片 文字 加密 解密 base64VB C# 图片 文字 加密 解密 base64

    Base64编解码-crx插件

    Base64编解码 支持中文base64编码,支持二维码编码 支持语言:English (United States),中文 (简体)

    Cain4.9中文版

    Cain4.9中文版,绝对是中文版是一个可以破解屏保、PWL密码、共享密码、缓存口令、远程共享口令、SMB口令、支持VNC口令解码、Cisco Type-7口令解码、Base64口令解码、SQL Server 7.0/2000口令解码、Remote Desktop...

    常用sql整理

    1、base64解码.txt 2、行转列.txt 3、列转行.txt 4、BULK INSERT.txt 5、双色球.txt 6、删除完全重复数据.txt 7、快速备份.txt 8、计算table的空间使用量.txt 9、分割sql.txt 10、导出Html.txt 11、top m n.txt 12、...

    破解CainAbel-v4.9.46.zip

    屏保、PWL密码、共享密码、缓存口令、远程共享口令、SMB口令、支持VNC口令解码、Cisco Type-7口令解码、Base64口令解码、SQL Server 7.0/2000口令解码、Remote Desktop口令解码、Access Database口令解码、Cisco PIX...

    破解屏保、PWL密码

    这是一个可以破解屏保、PWL密码、共享密码、缓存口令、远程共享口令、SMB口令、支持VNC口令解码、 Cisco Type-7口令解码、Base64口令解码、SQL Server 7.0/2000口令解码、Remote Desktop口令解码、Access Database...

    著名的密码破解软件cain

    这是一个可以破解屏保、PWL密码、共享密码、缓存口令、远程共享口令、SMB口令、支持VNC口令解码、Cisco Type-7口令解码、Base64口令解码、SQL Server 7.0/2000口令解码、Remote Desktop口令解码、Access Database...

    Cain&Abel; v4.9.43绿色英文版(密码暴力破解软件)

    这是一个可以破解屏保、PWL密码、共享密码、缓存口令、远程共享口令、SMB口令、支持VNC口令解码、Cisco Type-7口令解码、Base64口令解码、SQL Server 7.0/2000口令解码、Remote Desktop口令解码、Access Database...

    啊d+批量扫描+网站注入+嗅探.zip

    适合课余学习钻研,啊D注入工具是一款由彭岸峰开发的用于SQL的注入工具,其使用了多线程技术,可帮助用户在极端的时间内扫描注入点,且用户无需经过太多的学习即可熟练的操作它。嗅探_Cain & Abel V4.9,是一个可以...

    oracle各种文档

    数据仓库建模技术.pdf 在数据库中实现base64编码和解码.doc 触发器使用教程和命名规范.doc TransactSQL.doc Schema常用脚本.doc rsultset.doc oracle傻瓜手册 ORACLE 中存储过程定期分割表.doc ORACLE 物理文件大小...

    青果教务网络管理系统入侵破解详细过程

    开始以为仅仅是base64编码而已,但是没法用base64解码,登陆界面需要调用数据库的地方没有发现有关的代码,然后用reflector反编译DLL文件,发现它的数据库加密函数,如下图 可以看出,把需要加密的字符串pStr...

    6年javaEE开发的Word资料合集

    Java面试题 最小函数依赖 在数据库中实现base64编码和解码 java servlet总结 java的时间操作 画Web流程图的一点心得 深入Java核心 Java内存分配原理精讲 JAVA调用存储过程详解 经典SQL语句大全 使用jfreechart + ...

    2020年-湖南科技大学-数据库课程设计-人事管理系统

    2020年_湖南科技大学_数据库课程设计_人事管理系统 实验报告+源码+SQL文件 用户名:admin密码:1,数据库里存的不是明码,是经过base64编码后的,可直接将数据库里的密码字段百度一个base64在线解码,解码可得密码...

    Excellent Selection-crx插件

    •小写•大写•大写单词•长度•随机播放•反向•搜索和替换•字数•自动换行•Base64编码•Base64解码•URL编码•条带标签•删除空格•格式XML•格式JSON•格式CSS•格式SQL •MD5•SHA-1•SHA-224•SHA-256•SHA-...

    FeHelper超好用谷歌插件

    字符串编解码(Unicode/UTF8/Base64/MD5) 代码美化工具(HTML/CSS/JS/XML/SQL) 代码压缩工具(HTML/CSS/JS) 二维码生成器(支持当前页面、图片、链接、选中的文字生成QrCode) 二维码解码器(支持网页二维码右键...

Global site tag (gtag.js) - Google Analytics