sql server base64解密函数
2016-05-26 15:17
295 查看
USE [LVP] GO /****** Object: UserDefinedFunction [dbo].[base64_decode] Script Date: 2016/5/26 10:47:27 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO Create FUNCTION [dbo].[base64_decode] ( @encoded_text varchar(max) ) RETURNS varbinary(max) AS BEGIN DECLARE @output varbinary(max), @block_start int, @encoded_length int, @decoded_length int, @mapr binary(122) IF LEN(@encoded_text) & 3 > 0 OR @encoded_text LIKE '%[^ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=]%' COLLATE Latin1_General_Bin RETURN NULL SET @output = 0x -- The nth byte of @mapr contains the base64 value of the character with an ASCII value of n. -- eg. 65th byte = 0x00 = 0 = value of 'A' SET @mapr = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -- 1-33 + 0xFFFFFFFFFFFFFFFFFFFF3EFFFFFF3F3435363738393A3B3C3DFFFFFF00FFFFFF -- 33-64 + 0x000102030405060708090A0B0C0D0E0F10111213141516171819FFFFFFFFFFFF -- 65-96 + 0x1A1B1C1D1E1F202122232425262728292A2B2C2D2E2F30313233 -- 97-122 --get the number of blocks to be decoded SET @encoded_length = LEN(@encoded_text) SET @decoded_length = @encoded_length / 4 * 3 --for each block SET @block_start = 1 WHILE @block_start < @encoded_length BEGIN --decode the block and add to output --BINARY values between 1 and 4 bytes can be implicitly cast to INT SET @output = @output + CAST(CAST( SUBSTRING(@mapr, ASCII(SUBSTRING(@encoded_text, @block_start , 1)), 1) * 262144 + SUBSTRING(@mapr, ASCII(SUBSTRING(@encoded_text, @block_start + 1, 1)), 1) * 4096 + SUBSTRING(@mapr, ASCII(SUBSTRING(@encoded_text, @block_start + 2, 1)), 1) * 64 + SUBSTRING(@mapr, ASCII(SUBSTRING(@encoded_text, @block_start + 3, 1)), 1) AS int) AS binary(3)) SET @block_start = @block_start + 4 END IF RIGHT(@encoded_text, 2) = '==' SET @decoded_length = @decoded_length - 2 ELSE IF RIGHT(@encoded_text, 1) = '=' SET @decoded_length = @decoded_length - 1 RETURN SUBSTRING(@output, 1, @decoded_length) END
相关文章推荐
- redis 持久化的两种方式
- Mac忘记Mysql密码
- oracle awr报告对比功能
- 转载:Data Guard Physical Standby Setup in Oracle Database 11g Release 2
- Node.js 连接 MySQL 并进行数据库操作
- 详解SQL集合运算
- SQlite数据库简介和简单操作
- Redis 3.2 GEO功能支持
- SQL SERVER 2008为每个IP分配一个端口
- 通过Navicat for MySQL远程连接的时候报错mysql 1130的解决方法
- 在centos下安装mongodb
- (转)SqlConnection,SqlCommand,SqldataReader的用法总结:
- SQL对象名无效的解决
- SQL数据库备份文件自动压缩,bat
- jboss7.1.1配置数据库mysql与oracle
- MySQL 5.6 my.cnf 参数说明
- NoSQL-Redis【2】-实现分布式Session
- mysql中int、bigint、smallint 和 tinyint的区别详细介绍
- XAMPP在mac下配置mysql环境变量
- Oracle11g登陆sqlplus时一直提示密码错误