首页 > 其他分享 >带密匙的字符串加密解密函数(支持中文)

带密匙的字符串加密解密函数(支持中文)

时间:2023-08-16 17:55:51浏览次数:38  
标签:加密 String 带密匙 解密 SrcPos KeyPos SrcAsc Integer IntTemp

uses AnsiStrings;   Function JiaMi(Src:String; Key:String):String;   var     KeyLen :Integer;     KeyPos :Integer;     offset :Integer;     dest :String;     SrcPos :Integer;     SrcAsc :Integer;     Range :Integer;     IntTemp:integer;     SrcAnsi:PAnsiChar;   begin     KeyLen:=Length(Key);     KeyPos:=0;     Range:=1;     Randomize;     offset:=Random(Range);     dest:=format('%1.2x',[offset]);     SrcAnsi:=PAnsiChar(AnsiString(Src));     IntTemp:= Length(SrcAnsi);     for SrcPos := 1 to IntTemp do     begin       SrcAsc:=(Ord(SrcAnsi[SrcPos-1]) + offset) MOD 255;       if KeyPos < KeyLen then KeyPos:= KeyPos + 1 else KeyPos:=1;       SrcAsc:= SrcAsc xor Ord(Key[KeyPos]);       dest:=dest + format('%1.2x',[SrcAsc]);       offset:=SrcAsc;     end;     Result:=Dest;   end;   //解密函数   Function JieMi (Src:String; Key:String):String;   var     KeyLen :Integer;     KeyPos :Integer;     offset :Integer;     dest :String;     SrcPos :Integer;     SrcAsc :Integer;     TmpSrcAsc :Integer;     Range :Integer;     SrcAnsi:PAnsiChar;     IntTemp,i:Integer;     ByteArray: array of Byte;   begin     KeyLen:=Length(Key);     if KeyLen = 0 then key:='starlin';     KeyPos:=0;     SrcPos:=0;     SrcAsc:=0;     Range:=1;     offset:=StrToInt('$'+ copy(src,1,2));     SrcPos:=3;     IntTemp:=Length(Src) div 2;     setlength(ByteArray,IntTemp);     i:=0;     repeat       try         SrcAsc:=StrToInt('$'+ copy(src,SrcPos,2));       except         SrcAsc:=StrToInt('$00');       end;           if KeyPos < KeyLen Then KeyPos := KeyPos + 1 else KeyPos := 1;           TmpSrcAsc := SrcAsc xor Ord(Key[KeyPos]);           if TmpSrcAsc <= offset then         TmpSrcAsc := 255 + TmpSrcAsc - offset       else         TmpSrcAsc := TmpSrcAsc - offset;       ByteArray[i]:=TmpSrcAsc;       i:=i+1;       offset:=srcAsc;       SrcPos:=SrcPos + 2;     until SrcPos >= Length(Src);     CopyMemory(@SrcAnsi[0],@ByteArray[0],IntTemp);     dest:=string(AnsiStrings.strpas(SrcAnsi));     Result:=Dest;       end;     procedure TForm1.Button1Click(Sender: TObject);   begin showmessage(jiami('www.delphitop.com','123')); showmessage(jiemi(jiami('www.delphitop.com','123'),'123')); end;

标签:加密,String,带密匙,解密,SrcPos,KeyPos,SrcAsc,Integer,IntTemp
From: https://www.cnblogs.com/lucken2000/p/17635816.html

相关文章

  • 经常用到的加解密函数
    以下程序可直接用,拷贝就可以了,希望可以起到抛砖引玉的作用。functionStrDecrypt(s:string;key:word):string;var i:byte;const fc1=2; fc2=3;begin //result[0]:=s[0]; setlength(result,length(s)); fori:=1tolength(s) do begin result[i]:=char(byte(s[i])xo......
  • 解密Spring Framework的核心原理与魔法
    嗨,亲爱的读者朋友们!今天,我将带你解密SpringFramework的核心原理与魔法,帮助你深入理解这个强大的Java开发框架。作为一个技术达人,我将为你揭开SpringFramework的神秘面纱,让你在开发中游刃有余。SpringFramework简介SpringFramework是一个全面的、模块化的Java开发框架,被广泛用于......
  • C#SM2加密算法
    1.新建SM2Util类publicclassSM2Util{/***生成SM2秘钥对*string[0]公钥*string[1]私钥*/publicstaticstring[]GenerateKeyPair(){returnSM2.GenerateKeyPair();......
  • IM消息ID技术专题(七):深度解密vivo的自研分布式ID服务(鲁班)
    本文由vivo互联网技术AnPeng分享,本文收录时有内容修订和重新排版。1、引言本文通过对分布式ID的3种应用场景、实现难点以及9种分布式ID的实现方式进行介绍,并对结合vivo业务场景特性下自研的鲁班分布式ID服务从系统架构、ID生成规则与部分实现源码进行分享,希望为本文的阅读者......
  • c# 利用数据库将程序加密隐藏?
    下面将介绍如何通过LiteDB将自己的程序进行加密,首先介绍一下LiteDB。LiteDBLiteDB是一个轻量级的嵌入式数据库,它是用C#编写的,适用于.NET平台。它的设计目标是提供一个简单易用的数据库解决方案,可以在各种应用程序中使用。LiteDB使用单个文件作为数据库存储,这个文件可以在磁盘......
  • RSA公钥私钥和签名验签与加密解密
    加密解密: 前端用公钥加密密码,传给后端,后端用私钥解密获取密码明文,不可以用私钥加密用公钥解密,这样会报错,公钥加密私钥解密是用来防止消息泄露的,即使加密后的消息被他人获取,在没有私钥的情况下也无法知道原文.签名验签: A给B发消息,A用私钥将消息加签,将加签的消息和原消......
  • JS逆向实战21——某查查webpack密码加密
    声明本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!网站aHR0cHM6Ly93d3cucWNjLmNvbS8=前言阅读前请先阅读下我的另一篇文章看看别的webpack打包的网站......
  • c# 如何将程序加密隐藏?
    下面将介绍如何通过LiteDB将自己的程序进行加密,首先介绍一下LiteDB。LiteDBLiteDB是一个轻量级的嵌入式数据库,它是用C#编写的,适用于.NET平台。它的设计目标是提供一个简单易用的数据库解决方案,可以在各种应用程序中使用。LiteDB使用单个文件作为数据库存储,这个文件可以在磁盘上......
  • 使用 OpenSSL 解密 DBeaver 保存的数据库连接信息获取数据库连接密码
    你是不是使用任何软件时都喜欢记住密码?是的,我也喜欢。但如果有一天你想把密码分享给其他人,而你又不记得密码是什么了,没错你可以去查看已保存的密码,但是当你使用的是DBeaver时,不好意思,没有查看已保存的密码功能,这个时候不就尴尬了嘛。那么现在你也许不再需要因此而烦恼了,因为......
  • LKT加密芯片-医疗行业应用简介
    医疗、美容行业设备具有设备研发周期长、产品审核准入门槛高,审核资质时间长等特点,一旦其产品出现仿制等问题将会给公司带来巨大的经济影响。LKT系列加密芯片可以有效保护用户产品安全起到防po解、防复制的作用,从而保障产品安全和公司利益。LKT加密芯片又是如何保障产品安全的呢?下......