首页 > 其他分享 >ACCESS 混淆加密解密

ACCESS 混淆加密解密

时间:2023-10-15 21:59:04浏览次数:39  
标签:Function Dim 加密 String 解密 Len ACCESS result key

考虑到这样一个场景,程序只给用户使用到一定期限,如果用户没有新的KEY,将不能再使用程序.所以才有了下面这个想法.考虑不到位的地方,希望大家指正

一.数据表内有两个字段,A存储着过期日期,B字段存储着用户登陆日期,这里要重点说一下,如果用户打开程序时,电脑上的日期大于B字段的日期,则更新B字段;如果小于B字段的值,则不更新,这主要是防止用户把日期调到公元前.

二.如果程序启动时没有检测到这两个值,则直接关闭程序.

三.禁止shift键启动.这个我之前有写过 ACCESS 禁止用户使用SHIFT启动数据库 - 一曲轻扬 - 博客园 (cnblogs.com)

四.混淆AB两个字段的值,这节只讲这个主题,我给个简单的算法,大家可以再开发

混淆日期:

Public Function EncryptDate(ByVal dateStr As String) As String
    Dim result As String
    Dim key As String
    Dim i As Integer
    
    ' 定义密钥,自己定义,还原时,还要用到这个key
    key = "MySecretKey"
    
    ' 遍历日期字符串的每个字符,对其进行异或操作
    For i = 1 To Len(dateStr)
        result = result & Chr(Asc(Mid(dateStr, i, 1)) Xor Asc(Mid(key, (i Mod Len(key)) + 1, 1)))
    Next i
    
    ' 返回混淆后的字符串
    EncryptDate = RandomizeDigits(result)
End Function
Public Function RandomizeDigits(ByVal inputStr As String) As String
    Dim result As String
    Dim i As Integer
    
    ' 定义数字字符集
    Dim digits As String
    digits = "0123456789"
    
    ' 混淆字符串,将随机数字插入到每个字符之间
    For i = 1 To Len(inputStr)
        result = result & Mid(inputStr, i, 1) & Mid(digits, Int((Len(digits) * Rnd) + 1), 1)
    Next i
    
    ' 如果结果的长度小于32,则继续添加随机数字,直到达到32位长度
    Do While Len(result) < 32
        result = result & Mid(digits, Int((Len(digits) * Rnd) + 1), 1)
    Loop
    
    ' 返回长度为32的结果字符串
    RandomizeDigits = Left(result, 32)
End Function

上面的EncryptDate 函数,把一个字符串的日期,混淆成下面这个样子,可以看出来,还是很容易被人看出破绽的:

?EncryptDate("2023-10-15")
KcWP_TDfTL

所以我们还要再用 RandomizeDigits 函数包装一下,加入随机数字,结果大概是这个样子:

?EncryptDate("2023-10-15")
K7c5W5P2_3T7D0f7T8L7048739809357

以上就是加密混淆的过程,知道了方法,还原起来就会变得很简单了:

Public Function DecryptDate(ByVal encryptedStr As String) As String
    Dim result As String
    Dim key As String
    Dim i As Integer
    encryptedStr = RemoveDigitsRegex(encryptedStr)
    ' 定义密钥,自己定义吧
    key = "MySecretKey"
    
    ' 遍历混淆后的字符串的每个字符,对其进行异或操作,这里可以是其他算法
    For i = 1 To Len(encryptedStr)
        result = result & Chr(Asc(Mid(encryptedStr, i, 1)) Xor Asc(Mid(key, (i Mod Len(key)) + 1, 1)))
    Next i
    
    ' 返回还原后的日期字符串
    DecryptDate = result
End Function
Public Function RemoveDigitsRegex(ByVal inputStr As String) As String
    Dim regex As Object
    Set regex = CreateObject("VBScript.RegExp")
    
    regex.Pattern = "\d+" ' 匹配数字
    regex.Global = True     '全部替换
    RemoveDigitsRegex = regex.Replace(inputStr, "")
End Function
在运行 DecryptDate 时,要先把参数中的数字全部清除掉,剩下的就是真正的密文了,按照来时的路,很快就能解出正确的日期
?EncryptDate("2023-10-15")
K7c5W5P2_3T7D0f7T8L7048739809357
?DecryptDate("K7c5W5P2_3T7D0f7T8L7048739809357")
2023-10-15

五.当用户的KEY到期后,会弹出一个输入框,只有正确的KEY才能被存储到数据库,然后等待下一个周期.(略)

以上就是本节的所有内容.

 

标签:Function,Dim,加密,String,解密,Len,ACCESS,result,key
From: https://www.cnblogs.com/yoooos/p/17766252.html

相关文章

  • 文件目录加密方法
    文件目录加密指的是通过加密方法加密目录名称,但保留目录结构,通过加密的目录保存加密文件,进而保持整个目录的保密性。由于目录的特别,加密的方法需要满足以下要求:1,加密后的密文尽可能短,从而能加密较深的目录结构2,加密后的密文要能保持差异性,即目录名称间较小的差异,能产生较大的密......
  • access MD5加密
    PrivateConstBITS_TO_A_BYTE=8PrivateConstBYTES_TO_A_WORD=4PrivateConstBITS_TO_A_WORD=32Privatem_lOnBits(30)Privatem_l2Power(30)PrivateFunctionLShift(lValue,iShiftBits)IfiShiftBits=0ThenLShift=lValueExitFunction......
  • 3-ocserv基于pam_access模块进行用户访问控制
    ocserv基于pam_access模块进行用户访问控制一、配置ocserv的PAM文件打开/etc/pam.d/ocservvim/etc/pam.d/ocserv在默认/etc/pam.d/ocserv配置中的@includecommon-auth下方插入pam_access.so模块进行用户访问控制:authrequiredpam_access.so请确保这行在auth......
  • python项目加密
     https://blog.csdn.net/weixin_38649779/article/details/131911893 sourcedefenderhttps://dev.to/richard_scott/encryption-for-protecting-python-source-code-4ckg https://zhuanlan.zhihu.com/p/54297880https://github.com/echoechoin/spython/   https://......
  • Go泛型解密:从基础到实战的全方位解析
    本篇文章深入探讨了Go语言的泛型特性,从其基础概念到高级用法,并通过实战示例展示了其在实际项目中的应用。关注【TechLeadCloud】,分享互联网架构、云服务技术的全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里......
  • https是如何实现加密http消息的?
    1、利于服务端证书公钥加密、服务端私钥解密得到会话密钥(使用证书使服务端也会话密钥)2、使用会话密钥-属于对称加密,用的是同一个密钥3、对称加密消息  ......
  • Springboot 加密方案探讨
    背景toB的本地化java应用程序,通常是部署在客户机器上,为了保护知识产权,我们需要将核心代码(例如Lience,Billing,Pay等)进行加密或混淆,防止使用jadx等工具轻易反编译。同时,为了更深层的保护程序,也要防止三方依赖细节被窥探;业界方案ProGuard简介:开源社区有名的免费混淆工具,......
  • 【技术解密】RabbitMQ消息积压不消费怎么办?小米给你最佳解决方案!
    大家好,我是小米。今天我们来聊一下关于RabbitMQ的消费问题。有小伙伴私信我说“在使用RabbitMQ时会出现消费卡死的情况,重启服务后可以正常消费,但过一段时间消息又积压不消费了,只能再次重启服务”,这个问题确实令人头疼,但是不用担心,我们一起来解决这个难题!检查连接是否正确首先,我们......
  • 解密Prompt系列17. LLM对齐方案再升级 WizardLM & BackTranslation & SELF-ALIGN
    话接上文的指令微调的样本优化方案,上一章是通过多样性筛选和质量过滤,对样本量进行缩减,主打经济实惠。这一章是通过扩写,改写,以及回译等半监督样本挖掘方案对种子样本进行扩充,提高种子指令样本的多样性和复杂度,这里我们分别介绍Microsoft,Meta和IBM提出的三个方案。Microsoft:WizardL......
  • postman如何使用md5 、base64加密传参
    使用CryptoJS库什么是CryptoJS?CryptoJS是一个纯JavaScript实现的加密库,提供了很多常见的加密算法和加密模式,例如AES、DES、TripleDES、MD5、SHA-1、SHA-256等。它支持的加密方式很全面,使用简便,而且在前端中使用也非常方便postman在Pre-requestScript中先进行加密,然后设置全局......