【新星计划回顾】第六篇学习计划-通过自定义函数和存储过程模拟MD5数据

news2025/1/13 2:49:35

🏆🏆时间过的真快,这是导师回顾新星计划学习的第六篇文章!
最近这段时间非常忙,虽然导师首次参与新星计划活动已经在4月16日圆满结束,早想腾出时间来好好整理活动期间分享的知识点。
🏆🏆非常感谢大家的支持和活动期间的文章输出,导师也是忙里抽空给大家准备分享的内容,也是尽力了,所以分享的知识点主要是偏向于基础和基本的实战,虽然不是讲解的很系统,但是能够了解到一定的实战信息
🏆🏆期待我们的下次学习,导师将会在6月或者7月再次发起新星计划,本次活动也得到学员和平台的肯定,平台也是非常欢迎导师再次发起新星计划,非常感谢!

目录

  • 1、MD5
    • 1.1、基本概念
    • 1.2、碰撞破解
    • 1.3、场景使用
  • 2、知识点
    • 2.1、函数分类
    • 2.2、自定义函数
      • 2.2.1、标量值函数
      • 2.2.2、表值函数
      • 2.2.3、修改函数
    • 2.3、存储过程
      • 2.3.1、创建无参数存储过程
      • 2.3.2、创建有参数存储过程
      • 2.3.3、修改存储过程
  • 3、模拟数据
    • 3.1、创建MD5数据表
    • 3.2、创建MD5标志表
    • 3.3、取值范围函数
    • 3.4、创建存储过程

  • 计划
    在这里插入图片描述

1、MD5

1.1、基本概念

1)MD5的全称,Message-Digest Alg orithm5(信息-摘要算法),在90年代初由Ronald L. Rivest开发出来,经MD2、MD3和MD4发展而来。
2)MD5是一种散列(Hash)算法,散列算法的用途不是对明文加密,目的是让人看不懂,而是通过对信息摘要的比对,防止对原文的篡改。通常对散列算法的“破解”,就是找碰撞。

1.2、碰撞破解

简单的理解,就是通过穷举明文,通过明文加密和当前密文进行对比,如果对比相同值则碰撞破解成功。

1.3、场景使用

说实在的,挺佩服这家公司公司的,就像它页面那句话,本站对于md5、sha1、mysql、ntlm等的实时解密成功率在全球遥遥领先。成立17年,一直被抄袭,从未被超越。运行17年,累计加密数据超过500TB,超过90万亿条记录。
在这里插入图片描述

2、知识点

2.1、函数分类

上一次已经提到过,常见的函数有如下几种:表值函数、标量值函数、聚合函数、系统函数。
这里只简单讲解常见的【系统函数(内置函数)】中的【聚合函数】和【日期和时间函数】,如下图
感兴趣的小伙伴可以查看导师这篇文章:https://blog.csdn.net/lmy_520/article/details/106016101

  • 聚合函数
    在这里插入图片描述
  • 日期和时间函数
    在这里插入图片描述

2.2、自定义函数

关键词:function
上一篇我们也简单讲解了自定义函数的作用和优势,以下再提一下
1)用于计算复杂逻辑,可以返回单个标量值或者结果集
2)能够接收传入参数,单不能输出传出参数
3)优点,模块化、执行速度更快、减少网络流量
如果在程序之间执行,特别是跨服务器数据库,每次需要把一大串执行sql语句通过网络传到目标服务器数据库是需要消耗比较大的流量,
所以定义成函数自然就减少了很多sql语句传送,直接就是一个函数名搞定

2.2.1、标量值函数

  • 代码
-- 创建标量值函数
go
    create function constData(@test int) returns int
    as
    begin
    -- 写自己的逻辑
    set @test+=1
    return @test
    end
go

-- 调用
declare @testValue int
set @testValue=1
select dbo.constData(@testValue) as 返回值
  • 效果
    在这里插入图片描述

2.2.2、表值函数

  • 方式一
-- 定义
create function funcName (@a int) returns table
as
return select top 10 studentName from student_score_20wan

-- 调用
select * from funcName(1)
  • 方式二
go
create function consTable(@test int) returns @tempTable table
(studentName nvarchar(50))
as
begin
    -- 写自己的逻辑
    insert into @tempTable(studentName)
    select top 10 studentName from student_score_30wan
end
go

-- 调用
select * from constTable(1)
  • 两种方式返回的效果
    在这里插入图片描述
  • 温馨提示
    详细可查看官方解释:https://learn.microsoft.com/zh-cn/sql/relational-databases/user-defined-functions/user-defined-functions?view=sql-server-ver16

2.2.3、修改函数

1)可视化界面修改
在这里插入图片描述
2)sql语句进行修改
通过上一步可视化界面点击修改后,同样也是跳转到sql语句界面,在界面可以查看修改使用了alter关键词
在这里插入图片描述

🏆🏆 原则:Write Less Do More!
🍎🍎简介:一只喜欢全栈方向的程序员,专注基础和实战分享,欢迎咨询,尽绵薄之力答疑解惑!

2.3、存储过程

关键词:proc
简单理解,存储过程的主要作用就是更加灵活集中处理各类简单或复杂场景功能,可以有入参和出参,以及获得结果集合。
存储过程优点
1)运行速度快,创建时已经编译,更加安全高效
2)可以编写更加复杂的数据库操作
3)更加能够节省网络流量,一般复杂sql语句肯定会写很多,如果每次都是通过网络传送,那必定消耗很大流量

2.3.1、创建无参数存储过程

可以先判断是否存在,不存在则创建,否则移除再创建或者其他操作
1)格式
create proc 名称
2)代码

-- 创建无参存储过程
if (exists (select * from sys.objects where name = 'proc_myProcOne'))
    drop proc proc_myProcOne
go
create proc proc_myProcOne
as
select top 10 * from student_score

-- 执行存储过程
exec proc_myProcOne;

3)效果
在这里插入图片描述

2.3.2、创建有参数存储过程

1)格式
create proc 名称(参数1,参数2,…)
2)代码

-- 创建多个参存储过程
if (exists (select * from sys.objects where name = 'proc_more_myProcOne'))
    drop proc proc_more_myProcOne
go
create proc proc_more_myProcOne(
    @studentName nvarchar(50),
    @courseName nvarchar(50)
)
as
select top 10 * from student_score 
where studentName=@studentName and courseName=@courseName

-- 执行存储过程
exec proc_more_myProcOne '陈珊歆','语文';

3)效果
在这里插入图片描述

2.3.3、修改存储过程

通过可以通过可视化界面修改,跳转到sql语句
在这里插入图片描述

3、模拟数据

3.1、创建MD5数据表

本次是模拟添加MD5数据,因此表设计如下
基本字段:自增编号、Guid编号、添加时间
表字段:md5加密值,md5密文值、md5长度

create table md5_data_eight
(
    id int identity(1,1) primary key,
    guid_value varchar(50),
    md5_plaintext varchar(100),        -- 明文
    md5_ciphertext varchar(100),    -- 密文
    md5_length int,                    -- 明文长度
    add_time datetime
)

3.2、创建MD5标志表

主要用于记录当前加密到那个组合,就不需要每次都是从第一次开始,比如00000000
只需要每次调用函数时,能够返回当前组合的明文值,然后再在存储过程里对明文进行加密

create table md5_data_eight_flag
(
    id int identity(1,1) primary key,
    p1 int,
    p2 int,
    p3 int,
    p4 int,
    p5 int,
    p6 int,
    p7 int,
    p8 int,
    add_time datetime,                    -- 明文长度
    update_time datetime
)

-- 创建完表后,初始化一条记录
insert into md5_data_eight_flag(p1,p2,p3,p4,p5,p6,p7,p8,add_time,update_time)
values(1,1,1,1,1,1,1,1,getdate(),getdate())

3.3、取值范围函数

1)字母大小写,az和AZ,26+26=52个值
2)阿拉伯数字,0~9,10个值
总共加起来就是52+10=62个值,根据8位长度组合规则,一共有多少总组合?
总共组合值等于62的8次方,组合值=Math.pow(62,8)=218340105584896
在这里插入图片描述
3)通过上面,基数太大,重新调整下取值范围,直接纯数字加密
总共组合值等于10的8次方=Math.pow(10,8)=100000000=1亿条记录

  • 代码
    主要注意返回的字符串,必须加上返回长度,否则可能回只返回一位

-- 定义函数:返回表变量结果集

go
    create function getCurrentPlaintext() returns varchar(8)
    as
    begin
        -- 写自己的逻辑
        -- 定义表变量
        declare @tempTable table(
            id int identity(1,1) primary key, 
            value nvarchar(1)
        )
        
        insert into @tempTable values
        ('0'),('1'),('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9')
        
        declare @p1 int
        declare @p2 int
        declare @p3 int
        declare @p4 int
        declare @p5 int
        declare @p6 int
        declare @p7 int
        declare @p8 int
        select @p1=p1,@p2=p2,@p3=p3,@p4=p4,
        @p5=p5,@p6=p6,@p7=p7,@p8=p8
        from md5_data_eight_flag

        declare @plaintext varchar(8)
        set @plaintext=''
        select @plaintext+=[value] from @tempTable where id=@p1
        select @plaintext+=[value] from @tempTable where id=@p2
        select @plaintext+=[value] from @tempTable where id=@p3
        select @plaintext+=[value] from @tempTable where id=@p4
        select @plaintext+=[value] from @tempTable where id=@p5
        select @plaintext+=[value] from @tempTable where id=@p6
        select @plaintext+=[value] from @tempTable where id=@p7
        select @plaintext+=[value] from @tempTable where id=@p8
        --print('第一个明文组合:'+@plaintext)

        return @plaintext
    end
go

3.4、创建存储过程

在使用这条语句保存到表时,会发现是乱码,如下
在这里插入图片描述

  • 解决方法
    直接在convert后面加多一个参数2即可,可以复制加密串到在线解密网站进行验证
    在这里插入图片描述
  • 完整代码

go
create proc proc_addMd5
as
begin
    
    declare @plaintext varchar(8)
    declare @ciphertext varchar(100)
    
    select @plaintext=dbo.getCurrentPlaintext()
    --print(@plaintext)

    declare @p1 int
    declare @p2 int
    declare @p3 int
    declare @p4 int
    
    declare @p5 int
    declare @p6 int
    declare @p7 int
    declare @p8 int

    select @p1=p1,@p2=p2,@p3=p3,@p4=p4,
    @p5=p5,@p6=p6,@p7=p7,@p8=p8
    from md5_data_eight_flag

    -- 第一位
    if (@p1+1)>10 begin
        set @p1=1
        
        -- 第二位
        if @p2>10 begin
            set @p2=1

            -- 第三位
            if @p3+1>10 begin
                set @p3=1

                -- 第四位
                if @p4>10 begin
                    set @p4=1

                    -- 第五位
                    if @p5>10 begin
                        set @p5=1

                        -- 第六位
                        if @p6>10 begin
                            set @p6=1

                            -- 第七位
                            if @p7>10 begin
                                set @p7=1

                                -- 第八位
                                if @p8>10 begin
                                    set @p8=8
                                end
                                else begin
                                    set @p8+=1
                                end
                            end
                            else begin
                                set @p7+=1
                            end
                        end
                        else begin
                            set @p6+=1
                        end
                    end
                    else begin
                        set @p5+=1
                    end
                end
                else begin
                    set @p4+=1
                end
            end
            else begin
                set @p3+=1
            end
        end
        else begin
            set @p2+=1
        end
    end
    else begin
        set @p1+=1
    end
    
    
    -- 添加一条记录
    select @ciphertext=convert(varchar(100),HashBytes('md5',@plaintext),2)
    insert into md5_data_eight(guid_value,md5_plaintext,md5_ciphertext,md5_length,add_time)
    values(newid(),@plaintext,@ciphertext,8,getdate())

    -- 更新下一个明文标识
    /*print(@p1)
    print(@p2)
    print(@p3)
    print(@p4)
    print(@p5)
    print(@p6)
    print(@p7)
    print(@p8)*/
    update md5_data_eight_flag set 
    p1=@p1,p2=@p2,p3=@p3,p4=@p4,p5=@p5,p6=@p6,p7=@p7,p8=@p8,
    update_time=getdate()
    where id=1
end
  • 效果
    在这里插入图片描述
  • 简单一点的方式模拟数据
declare @count int
set @count=1000000
while @count>0 begin
    set @count-=1
    exec dbo.proc_addMd5
end

在这里插入图片描述

🍎🍎 本篇到此结束,感谢阅读的小伙伴,打个小小的ad,欢迎关注导师的公众号【有趣小馆】,导师会时不时发布一些有趣好玩的功能,欢迎关注!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/667351.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习:问题构建及框架化

机器学习作为一种解决方案,并不是“万金油”,它只适用于一些特定的场景。在实际应用中,我们首先需要进行问题构建——即通过分析问题以隔离需要解决的各个元素的过程。问题构建有助于确定项目的技术可行性,并提供一组明确的目标和…

应届生软件面试自我介绍(合集)

应届生软件面试自我介绍篇【1】 尊敬的领导: 您好! 我是中南大学(原中南工业大学)冶金科学与工程学院2014年轻金属冶金专业应届毕业生。在此临近毕业之际,我希望能得到贵单位的赏识与栽培。为了发挥自己的才能,特向贵单位自荐。自我介绍 中南…

在元宇宙上做传统建筑施工培训提高培训安全性和效果

随着VR虚拟现实技术不断发展,VR元宇宙在建筑行业中的应用也越来越广泛。通过VR元宇宙技术打通虚拟空间和现实空间实现建筑全生命周期的改进和优化,形成全新的数字建造体系,达到降低成本、提高生产效率、高效协同的效果,促进建筑业…

SignalR 跨域问题(Vue3+Net6)

文章目录 背景困难~~*调用 UseCors*~~ 解决办法环境错误信息解决方式部分代码 问题分析 背景 使用前后端分离技术,前端使用Vue,部署在独立的服务器上,后端接口部署在另外一个服务器上。 困难 网上找了一个多小时的SignalR的跨域问题&#…

textract OCR的安装使用

安装 pip install textract使用 在 Python 中,textract 是一个用于提取文本和信息的库。它提供了一个函数 textract.process(),用于处理不同类型的文档并提取文本内容。下面是 textract.process() 函数的各个参数的介绍: filename&#xf…

spring boot框架步骤

目录 1. 创建一个新的Spring Boot项目2. 添加所需的依赖3. 编写应用程序代码4. 配置应用程序5. 运行应用程序6. 编写和运行测试7. 部署应用程序 总结 当使用Spring Boot框架开发应用程序时,以下是一些详细的步骤: 1. 创建一个新的Spring Boot项目 使用…

ChatGPT在物流与运输行业的智能场景:智能调度和自动驾驶的前瞻应用

第一章:引言 随着人工智能技术的飞速发展,物流与运输行业正迎来一场革命。传统的调度和运输模式已经无法满足快速增长的物流需求和客户期望。在这一领域,ChatGPT作为一种先进的自然语言处理模型,具有巨大的潜力。本文将探讨ChatG…

【经验贴】多项目并行,如何解决资源管理这个难点?

随着公司业务的逐步增加,我手上管理的项目也多了起来,开始接触了一些中大型项目。但还没来得及算能拿到多少项目奖金,我就被接踵而至的管理难题压得喘不过气来,第一次感受到多项目并行带来的手忙脚乱的感觉。 我首先遇到了各种资…

分享 7 个不常用但有用的 CSS 小技巧

在这篇文章中,我想向您展示一些简单的CSS技巧,您可以在下一个项目中使用它们。让我们开始吧! 1、-webkit-text-stroke 通过使用这个简单易用的属性,可以创建出酷炫的文字效果。它可以给文字添加描边。-webkit-text-stroke是-webki…

【计算机视觉 | 目标检测】arxiv 计算机视觉关于目标检测的学术速递(6月19日论文合集)

文章目录 一、检测相关(7篇)1.1 Vehicle Occurrence-based Parking Space Detection1.2 Squeezing nnU-Nets with Knowledge Distillation for On-Board Cloud Detection1.3 MixedTeacher : Knowledge Distillation for fast inference textural anomaly detection1.4 Efficien…

金测评 听歌更自如的骨传导耳机,音质更出色,南卡Runner Pro 4S体验

我一直对骨传导耳机很感兴趣,因为这种耳机可以让我在户外运动的时候,既能享受音乐,又能保持对周围环境的敏感。为了获得更好的听歌体验,我的骨传导耳机换代频率很高,目前我用的是一款南卡Runner Pro 4S的骨传导耳机&am…

windows环境cmake引用boost库

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、下载源代码二、编译前准备1.操作系统2.gcc环境3.建立安装目录 三、开始编译1.解压源代码2.开始编译 四、开始使用1.Clion创建项目2.Boost版本差异3.Boost版…

数据结构Pta训练题函数题详解

​ pta网站:PTA | 程序设计类实验辅助教学平台 (pintia.cn) 文章内容较长,建议搭配目录使用 点击直达快乐 6-1 线性表元素的区间删除解析: 6-2 有序表的插入解析: 6-3 合并两个有序数组解析 6-4 顺序表操作集解析 6-5 递增的整数…

Linux磁盘空间占满,但搜不到大文件

使用 df -h 查看磁盘空间 使用 du -sh * 查看每个目录的大小 经过查看没有发现任何大的文件夹。 继续下面的步骤 如果您的Linux磁盘已满,但是通过 du -sh 找不到大文件,可能是因为有一些进程正在写入磁盘,但是这些文件已经被删除&#…

与用户同行!2023卡萨帝开启高端生活方式新时代

6月20日,2023思享荟暨卡萨帝品牌升级发布会在重庆国际博览中心举行。在经历了高端产品引领、高端品牌引领、高端场景引领后,卡萨帝启动全新品牌升级,持续与用户同行,开启高端生活方式引领的新时代。 现场,海尔智家副总…

千万不能小瞧的PCB半孔板

PCB半孔是沿着PCB边界钻出的成排的孔,当孔被镀铜时,边缘被修剪掉,使沿边界的孔减半,让PCB的边缘看起来像电镀表面孔内有铜。 模块类PCB基本上都设计有半孔,主要是方便焊接,因为模块面积小,功能…

一键打车/代驾小程序源码app+司机入住uniapp+thinkphp

一键打车/代驾小程序源码app司机入住uniappthinkphp 系统技术架构 开发环境:PHP7.2 mysql5.7 后端:thinkphp 前端:uniapp 后台管理:PC端 司机端:安卓端 苹果端 乘客端:安卓端 苹果端 小程序端 功…

ai聊天推荐这些工具,告诉你ai聊天网站有哪些

“ai聊天网站有哪些”是一个常见的问题,当今互联网时代,人工智能技术正在不断发展,ai聊天网站和软件成为了人们交流和获取信息的重要工具。本文将为您介绍一些知名的ai聊天网站和软件,让您快速了解“ai聊天网站有哪些”这个问题。…

按钮权限布局(设置 element中 tree 树的排列)

页面中使用 <el-buttontype"text"click"edit(slotProps.date)"v-btn-key"[client:clue:update]">编辑</el-button><el-buttontype"text"click"del(slotProps.date)"v-btn-key"[client:clue:delete]&quo…

想读2023级中外合作办学硕士,人大女王金融硕士国际班或许是你最后的机会了

已经进入6月下旬&#xff0c;大部分院校中外合作办学在职研究生的招生已经截止&#xff0c;部分同学还在犹豫纠结中&#xff0c;各大高校的名额就已经都满了。想要读2023级还有可能吗&#xff1f;中国人民大学与加拿大女王大学金融硕士国际班还能给你一次机会。 虽然我们无法确…