Delphi关于改进AES算法的加解密文件功能

win7(64位)安装oracle 11g 遇到多个问题的解决办法 阅读详情

以下代码出自http://blog.youkuaiyun.com/hellogv/,引用请注明出处!


代码有点乱,想要具体实现方法的朋友,可以给我留言

附:以下代码在杨泽晖 (Jorlen Young)所开发的AES算法接口上改进!

function StrToHex(Value: string): string;

var

  I: Integer;

begin

  Result := '';

  for I := 1 to Length(Value) do

    Result := Result + IntToHex(Ord(Value[I]), 2);

end;



 



function EncryptString(Value: string; Key: string): string;

var

  SS, DS: TStringStream;

  Size: Int64;

  AESKey256: TAESKey256;

begin

  Result := '';

  SS := TStringStream.Create(Value);

  DS := TStringStream.Create('');

  try

    Size := SS.Size;

    DS.WriteBuffer(Size, SizeOf(Size));

    FillChar(AESKey256, SizeOf(AESKey256), 0 );

    Move(PChar(Key)^, AESKey256, Min(SizeOf(AESKey256), Length(Key)));

    EncryptAESStreamECB(SS, 0, AESKey256, DS);

    Result := StrToHex(DS.DataString);

  finally

    SS.Free;

    DS.Free;

  end;

end;



function HexToStr(Value: string): string;

var

  I: Integer;

begin

  Result := '';

  for I := 1 to Length(Value) do

  begin

    if ((I mod 2) = 1) then

      Result := Result + Chr(StrToInt('0x'+ Copy(Value, I, 2)));

  end;

end;



function DecryptString(Value: string; Key: string): string;

var

  SS, DS: TStringStream;

  Size: Int64;

  AESKey256: TAESKey256;

begin

  Result := '';

  SS := TStringStream.Create(HexToStr(Value));

  DS := TStringStream.Create('');

  try

    Size := SS.Size;

    SS.ReadBuffer(Size, SizeOf(Size));

    FillChar(AESKey256, SizeOf(AESKey256), 0 );

    Move(PChar(Key)^, AESKey256, Min(SizeOf(AESKey256), Length(Key)));

    DecryptAESStreamECB(SS, SS.Size - SS.Position, AESKey256, DS);

    Result := DS.DataString;

  finally

    SS.Free;

    DS.Free;

  end;

end;



// ---------- 文件加密函数 按照 256 位密匙加密

procedure TSysClass.EncryptFile(SourceFile, DestFile: string;Key: string);

var

  SFS, DFS: TFileStream;

  Size: Int64;

  AESKey256: TAESKey256;

  info:string;

begin



  SFS := TFileStream.Create(SourceFile, fmOpenRead);

  try

    DFS := TFileStream.Create(DestFile, fmCreate);

    try

    //-----------------------------文件解密部分---------------------------------

      Size := SFS.Size;

      DFS.WriteBuffer(Size, SizeOf(Size));

      FillChar(AESKey256, SizeOf(AESKey256), 0 );

      Move(PChar(Key)^, AESKey256, Min(SizeOf(AESKey256), Length(Key)));

      EncryptAESStreamECB(SFS, 0, AESKey256, DFS);

    //-----------------------------在文件尾部加入判断解密是否成功的信息----------

      info:=EncryptString('123456789',Key);

      DFS.Seek(0,soFromEnd);

      DFS.Write(Info[1],60);//往后面写入60个字符,其中有一些保留没有使用

    finally

      DFS.Free;

    end;

  finally

    SFS.Free;

  end;

end;



// ---------- 文件解密函数 按照 256 位密匙解密

Function TSysClass.DecryptFile(SourceFile, DestFile: string;Key: string):boolean;

var

  Test, DFS: TFileStream;

  SFS:TMemoryStream;

  Size: Int64;

  AESKey256: TAESKey256;

  Info:string;

begin

  SetLength(Info,60);

 //----------------------------------------先检测文件解密是否正确-------------------

  Test := TFileStream.Create(SourceFile, fmOpenRead);

  try

    Test.Seek(-60,soFromEnd);

    Test.Read(Info[1],60);

    //-----------------------------判断密码是否正确,如果错误

    if AnsiContainsStr(Trim(info),EncryptString('123456789',Key)) = false then begin

       result:=false;//解密失败

       Test.Free;//释放流

       exit;

    end;

    //-----------------------------如果密码正确,取得实际文件的内容

    Test.Seek(0,soFromBeginning);

    SFS:=TMemoryStream.Create;

    SFS.CopyFrom(Test,Test.Size-60);

    Test.Free;

  except //-----------------------如果出现异常不能打开文件

    SFS.Free;

    Test.Free;

    result:=false;

    exit;

  end;

  //-------------------------------正式开始解密

  SFS.Position:=0;

  SFS.ReadBuffer(Size, SizeOf(Size));

  DFS := TFileStream.Create(DestFile, fmCreate);

  FillChar(AESKey256, SizeOf(AESKey256), 0 );

  Move(PChar(Key)^, AESKey256, Min(SizeOf(AESKey256), Length(Key)));

  DecryptAESStreamECB(SFS, SFS.Size - SFS.Position, AESKey256, DFS);

  DFS.Size := Size;

  DFS.Free;

  SFS.Free;

  result:=true;

end;

//-----------------------【加密解密基础函数】---------------------------------------------------- 
win7安装oracle11g64位的问题总结及创建用户的sql win7安装oracle11g64位的过程问题总结及创建用户的sql 阅读详情

相关推荐

AES加密算法的改进与实现

AES论文******************************

AES的优化及其记录

AES的优化及其记录 在最初完全是按照书上的说明照葫芦画瓢实现了AES,能跑的通,但效率很低,对同一明文反复进行加密的话,每秒差不多5MB的加密速度,这里的速度和个人电脑关系密切,我在每次加密都执行一次密钥扩展,如果多次加密使用同一密钥的话,可以单独仅实现一次密钥扩展,速度会快很多,大概能有一倍的速率提升。 使用查表法能大幅提升加密速度,最简单的在列混淆时GF28上的乘法(只用乘2和乘3)可以列个表能有一定的提升,大概20%左右,达到了6MB/S。 查表法真正的提升是在列混淆的建表上,可以建成一个4*25

rqX的博客 3463

AES加密算法

内包含AES加密源码及测试代码

【算法】AES算法优化

算法优化主要就是在矩阵相乘中,优化的方式也很简单,就是空间换时间。 AES算法的矩阵是有特点的,矩阵如下: 02  03  01  01 01  02  03  01 01  01  02  03 03  01  01  02 每一竖行都是02 01 01 03 组成。 分析矩阵相乘 02  03  01  01         a1      02*a1 + 03

行路中 2768

AES for Delphi 加密解密

AES for Delphi 加密解密,代码在Delphi10.2.3下已调试通过。 算法模式包含: CBC(Cipher Block Chaining,加密块链) 模式、 ECB(Electronic Code Book,电子密码本) 模式 加密结果包含:十六进制、base64 补码方式:PKCS5Padding 密钥长度:128、192、256

BookSim2.0 教程

本文是yz关于BookSim2.0的个人学习经验与教程。 1.介绍 什么是BookSim2.0 BookSim2.0 是周期正确的互联网络模拟器(A Cycle-Accurate Interconnection Network Simulator),被设计用来伴随William James Dally 等人出版的的书籍 Principles and Practices of INterconnection on Networks使用。 此后其功能不断得到扩展。当前的主要版本 BookSim 2.0 支持广泛

更新一些计算机体系架构NoC,GEM5, AXI4,还有machine learning 的日常 5736

AES For Delphi And Java, AES/ECB/PKCS5Padding(一)

最近项目要用AES加密算法,fuwu

kunlun122的专栏 1万+

c语言【分糖果】2023蓝桥杯4124(枚举,递归,dfs)

但是这是不符合我们糖果刚好分完的条件的,我们应该往回退到上一层,也就是孩子6这层,然后j+1=3,孩子7分到3个第二种糖果,这也不符合我们糖果刚好分完的条件,然后就会再次回退到孩子6这里,然后j+1=4,让我们的孩子7获得5块第二种糖果,然后还是不符合糖果刚分完的条件,于是再一次退回到孩子6这里,然后就会有外循环i+1=1,j=1,孩子7分到1块第一种糖果1块第二块糖果......然后就是这样的不停地回溯,试探,直到把整棵树遍历一遍,并且记录所有的满足条件的组合。先放一下我的代码,我的代码超时啦救命!

weixin_74331419的博客 730

【Delphi】AES、DES、Blowfish、RC等加密解密控件(含源代码、演示程序,帮助文件)

1. 对称加密解密控件 Cipher_Component 介绍 对称加密(也叫私钥加密)指加密和解密使用相同密钥的加密算法。有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,同时解密密钥也可以从加密密钥中推算出来。而在大多数的对称算法中,加密密钥和解密密钥是相同的,所以也称这种加密算法为秘密密钥算法或单密钥算法。它要求发送方和接收方在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都可以对他们发送或接收的消息解密,所以密钥的保密性对通信的安全性至关重要。 但是Delp

sensor_WU 博客 3018

基于STM32与ESP8266的MQTT协议实现阿里云物联网平台远程LED控制

本文详细介绍了如何利用STM32单片机与ESP8266 Wi-Fi模块,通过MQTT协议连接阿里云物联网平台,实现远程控制LED灯的完整物联网项目。内容涵盖硬件连接、阿里云平台配置、MQTT协议与AT指令解析、STM32代码实战以及数据解析与调试技巧,为嵌入式开发者提供了一个清晰、实用的物联网入门实践指南。

svm4gardener的博客 791

射频捷变收发器(RF Agile Transceiver) 国内外产品的现状、发展趋势及对比分析2

由于通信系统的研究、设计和实现的巨大进步,RF(射频)设备的新时代正在到来。特别是,随着通信、航空航天和防务以及高速仪器仪表、物联网(IoT)和协作传感器网络(CSN)的发展,以实现宽带高速通信,移动通信中频谱上不断增加的数据量要求而采用新颖的解决方案,以动态方式满足流量交换。然而,当前最先进的技术和设备需要一个合理的成熟时间来满足当前和即将到来的通信标准。

legendddh的博客 2607

win7Oracle安装问题及解决办法

Oracle 10g win7 安装总结: 1、安装前: win7下安装oracle10g的方法 (Forward)2010-01-27 15:43win7下安装oracle10g的方法 查找安装文件夹中的refhost.xml文件. (Oracle 10g客户端\stage\prereq\client\refhost.xml;oracle10g服务端\stage\prereq\db\re...

KiteRunner_的专栏 287

【车载以太网】ATU(Address Translation Unit / Address Table Unit)

【车载以太网】ATU(Address Translation Unit / Address Table Unit)

天赐好车的博客 150

win7安装oracle10g不兼容问题解决办法

<br />Windows7下安装Oracle10g<br /> Oracle官方网站上下载10203_vista_w2k8_x86_production_db.zip,这个数据库产品是For Vista和2008的微软操作系统的。<br />  <br /> 解压打开文件夹,找到两个refhost.xml文件,位置:<br /> (1):10203_vista_w2k8_x86_production_db.zip/db/Disk1/stage/prereq/db下;<br /> (2):102

coffeeco的专栏 5297

代谢组数据分析(一):生成代谢组数据SummarizedExperiment对象

本文介绍了基于Zeybel 2022年发布的多组学数据集的分析脚本,该数据集包含微生物组、宿主人体学指标、临床学指标、血浆代谢组和免疫因子等多维度数据,涵盖56位患者的横截面数据和22位患者的纵向时间序列数据。脚本旨在生成适用于下游分析的数据对象,主要包括phyloseq和SummarizedExperiment两类。phyloseq对象用于整合微生物群落数据,支持多数据整合、可视化、丰富分析功能和便捷的数据处理;SummarizedExperiment对象则广泛应用于基因组学和转录组学研究,便于数据整合、

专注生信领域 2987

[QMT量化交易小白入门]-四十九、中小盘策略是否还有未来,市值再平衡策略,年化收益率124%

该策略旨在通过定期再平衡持仓,保持投资组合中股票数量恒定(),并优先持有市值较小的股票。具体来说,策略每两天(period = 2)进行一次再平衡,根据当前市值对持仓进行调整,以实现微盘股的投资目标。中小市值策略对资金量要求有限制,资金量太大由于流动性不足,滑点可能较大,资金量太小,可能不能达到10-20只持仓,来分散风险,10-100w可能是比较理想的,后续可以根据波动率动态调仓,或波动率大于一定值时触发再平衡加入ROE或其他财务指标,或者研发投入强度大的专精特新企业,进行组合优化。

木头大左的博客 1183

win7 64位操作系统安装oracle客户端和plsql问题解决办法

2015年11月23日 首先,安装oracle 10g客户端。安装完成后,输入用户名、密码,测试登录成功。再安装plsql developer,安装完成后,输入用户名后点击登录,提示框空白显示。 解决办法: 1. 首先,安装oracle客户端时要以兼容模式、管理员权限运行。 2. 安装完成plsql developer后,在 tools-preference

昊谦粑粑 1499

使用 Simulink/Simscape Electrical/Stateflow,构建一个并网逆变器短路故障动态响应与恢复策略仿真模型

本文基于Simulink平台,详细介绍了并网逆变器短路故障的动态响应与恢复策略仿真方法。主要内容包括:1)构建包含热模型的高精度逆变器模型;2)模拟IGBT击穿和桥臂直通两种短路故障;3)设计基于Stateflow的微秒级快速保护逻辑;4)实现放电、去磁、自检、重启的完整恢复流程。仿真结果表明,所提出的保护方案能在200μs内有效限制故障电流,避免器件永久损坏,并通过标准化恢复流程实现系统安全重启。文章还探讨了硬件保护协同、多级保护和预测保护等高级策略,为电力电子系统安全防护提供了实用解决方案。

xiaoheshang_123的博客 107

修改oracle_home指定到 64位文件夹,win7(64位)安装oracle 11g 遇到多个问题的解决办法...

一、前言https://www.51zxw.net/List.aspx?cid=616 作为一名初学者在这个网站学习,按照课件讲解在自己的电脑上(win7 64位)安装oracle 11g(课件是这个版本),在安装的过程中遇到了很多问题,还好通过百度、csdn都一一解决,每个问题都会搜到多个答案,在这里做一下我遇到问题的解决办法。二、系统环境介绍1、操作系统这里值得注意的是“计算机名”,一定要尽量...

weixin_39654245的博客 737

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

win7安装oracle11g报无法创建目录错误

原创作品,出自 “深蓝的blog” 博客,欢迎转载,转载时请务必注明以下出处,否则追究版权法律责任。 深蓝的blog:   环境:win7 32bit 旗舰版客户安装管理PC 目标:为客户搭建一个练习环境,使用oracle11g   错误过程: 1、安装oracle11g软件,成功; 2、dbca建库,点击创建数据库后,报“无法创建目录”错误,如下图所示: 解决:

深蓝@黄炎龙 4525

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

安装oracle85% 报错,win7 安装oracle 10g 到85%报错

在Win7系统中安装oracle 10g,在建立数据库到85%的时候,遇到以下错误:“由于以下错误,Enterprise Manager配置失败 – 启动Database Control时出错 有关详细资料,请参阅D:\oracle\product\10.2.0\db_1\cfgtoollogs\dbca\orcl\emConfig.log中的日志文件。您可以以后通过手动运行D:\oracle\p...

weixin_39613839的博客 654

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

win10装上oracle没有oci,Win7x64安装Oracle11201x64 解决PLSQL Developer无法找到oci问题

安装64位的Oracle软件安装Oracle InstantClient保证PLSQL Developer能够登录OperationSystem : Win7 x64OracleSoftware: Oracle 11.0.2.0.1 x64(server&client)ORACLE_BASE: D:appzhouwlORACLE_HOME: D:appzhouwlproduct11....

weixin_39621044的博客 824

11gpath失败 oracle_win7安装oracle11g失败经验

在win7上安装oracle11g,先决条件有好几项检查没通过,比如物理内存小,环境变量PATH之类,选择全忽略;后来在复制安装过程出现找不到如下文件:C:\app\admin\product\11.2.0\dbhome_1\oc4j\j2ee\oc4j_applications\applications\em.earC:\app\admin\product\11.2.0\dbhome_1\oc4...

weixin_39530269的博客 247

Oracle10g 问题总结及对策

好久没有搞oracle,原来的使用也是在XP下,今天在win7下安装时,发现以下几个问题,简单记录下: 1.不能安装问题 这个解决方法: (1)修改安装文件对应目录下的文件            安装文件目录(10201_database_win32)\database\stage\prereq\db\refhost.xml           在...标签内添加如下代码:

Tony.Wang的专栏 1803

ISE14.7 win10安装报错

在安装ISE VM之前需要安装Oracle VirtualBox,看上去你没有装。

凡森 498

win7 64位安装32位oracle ODBC数据源管理器添加数据源找不到驱动问题。

win7 64位安装32位oracle ODBC数据源管理器添加数据源找不到驱动问题。 BI项目用informatica,服务器配的32位oracle。 本地开发系统win7 64位的。安装64位的oracle和服务器好像有冲突。只能装32位的。 但是装了32位的在ODBC数据源管理器添加数据源找不到ORACLE驱动。网上找了半天没找到原因。最后还是给试出来了。 要手动去启动32位的

chi4419424的专栏 7114
上一篇: Delphi调用WMI读取USB设备的PID和VID
下一篇: 一个发人深省的经典理财故事
欧巴Godwin
欧巴Godwin 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄20年 9690粉丝 141原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值