delphi加密解密程序报错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi加密解密程序报错相关的知识,希望对你有一定的参考价值。

使用编写好的dll进行加解密
源码如下:
-------------------------------------------------------------------------
function EncryptString(Source, Key: string): string;stdcall;varKeyLen: integer;KeyPos: integer;Offset: integer;Dest: string;SrcPos: integer;SrcAsc: integer;Range: integer;beginKeyLen := Length(Key);if KeyLen = 0 thenKey := 'delphi';KeyPos := 0;Range := 256;randomize;Offset := random(Range);Dest := format('%1.2x', [Offset]);for SrcPos := 1 to Length(Source) dobeginSrcAsc := (Ord(Source[SrcPos]) + Offset) mod 255;if KeyPos < KeyLen thenKeyPos := KeyPos + 1elseKeyPos := 1;SrcAsc := SrcAsc xor Ord(Key[KeyPos]);Dest := Dest + format('%1.2x', [SrcAsc]);Offset := SrcAsc;end;result := Dest;end;
function UnEncryptString(Source, Key: string): string;stdcall;
varKeyLen: integer;KeyPos: integer;Offset: integer;Dest: string;SrcPos: integer;SrcAsc: integer;TmpSrcAsc: integer;beginKeyLen := Length(Key);if KeyLen = 0 thenKey := 'delphi';KeyPos := 0;Offset := strtoint('$' + copy(Source, 1, 2));SrcPos := 3;repeatSrcAsc := strtoint('$' + copy(Source, SrcPos, 2));if KeyPos < KeyLen thenKeyPos := KeyPos + 1elseKeyPos := 1;TmpSrcAsc := SrcAsc xor Ord(Key[KeyPos]);if TmpSrcAsc <= Offset thenTmpSrcAsc := 255 + TmpSrcAsc - OffsetelseTmpSrcAsc := TmpSrcAsc - Offset;Dest := Dest + chr(TmpSrcAsc);Offset := SrcAsc;SrcPos := SrcPos + 2;until SrcPos >= Length(Source);result := Dest;end;
-------------------------------
程序链接没问题,加密没问题,可解密就会提示:

参考技术A 提示是 ‘$’ 不是整形!你看看不要$这个字符看看行不行如果还不行,加密解密函数该换一下。网上大把的。

Java报错:java.security.InvalidKeyException: Illegal key size

目录


1 报错场景

今天在使用idea打包maven项目时,微信小程序加密解密 出现这个错误:java.security.InvalidKeyException: Illegal key size。(测试也可能会出现这个问题)貌似是因为加密出现了问题。

1.1 产生错误原因

为了数据代码在传输过程中的安全,很多时候我们都会将要传输的数据进行加密,然后等对方拿到后再解密使用。我们在使用AES加解密的时候,在遇到128位密钥加解密的时候,没有进行什么特殊处理;然而,在使用256位密钥加解密的时候,如果不进行特殊处理的话,往往会出现这个异常java.security.InvalidKeyException: Illegal key size。

1.2 为什么会产生这样的错误

我们做Java开发,或是Android开发,都会先在电脑上安装JDK(Java Development Kit) 并配置环境变量,JDK也就是 Java 语言的软件开发工具包,JDK中包含有JRE(Java Runtime Environment,即:Java运行环境),JRE中包括Java虚拟机(Java Virtual Machine)、Java核心类库和支持文件,而我们今天要说的主角就在Java的核心类库中。在Java的核心类库中有一个JCE(Java Cryptography Extension),JCE是一组包,它们提供用于加密、密钥生成和协商以及 Message Authentication Code(MAC)算法的框架和实现,所以这个是实现加密解密的重要类库。

在我们安装的JRE目录下有这样一个文件夹:%JAVE_HOME%\\jre\\lib\\security(%JAVE_HOME%是自己电脑的Java路径,一版默认是:C:\\Program Files\\Java,具体看自己当时安装JDK和JRE时选择的路径是什么),其中包含有两个.jar文件:“local_policy.jar ”和“US_export_policy.jar”,也就是我们平时说的jar包,再通俗一点说就是Java中包含的类库(Sun公司的程序大牛封装的类库,供使用Java开发的程序员使用),这两个jar包就是我们JCE中的核心类库了。JRE中自带的“local_policy.jar ”和“US_export_policy.jar”是支持128位密钥的加密算法,而当我们要使用256位密钥算法的时候,已经超出它的范围,无法支持,所以才会报:“java.security.InvalidKeyException: Illegal key size or default parameters”的异常。那么我们怎么解决呢?

2 解决方案

去官方下载JCE无限制权限策略文件。

jdk 5: http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-java-plat-419418.html#jce_policy-1.5.0-oth-JPR

jdk6: http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html

JDK7的下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
JDK8的下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

下载后解压,可以看到local_policy.jar和US_export_policy.jar以及readme.txt
如果安装了JRE,将两个jar文件放到%JRE_HOME%\\lib\\security目录下覆盖原来的文件。

如果安装了JDK,还要将两个jar文件也放到%JDK_HOME%\\jre\\lib\\security目录下覆盖原来文件。

2.1 具体下载、解压、替换步骤

  • 1.下载:根据自己使用的jdk版本进入对应的链接下载(我这里是jdk8)

  • 2.解压:


  • 3.替换:(原来的2个jar包你可以备份下)

  • 4.如果不行就重启下软件,刷新下maven

以上是关于delphi加密解密程序报错的主要内容,如果未能解决你的问题,请参考以下文章

delphi 数字加密和解密算法

delphi url地址加密 求实例~~~~~~~~多谢

Delphi加密算法

delphi中有没有啥函数或控件是直接进行数据加密、解密的

如何在Delphi软件中实现对配置文件的加密解密

Delphi RSA加解密 (RSA公钥加密,私钥解密)(RSA私钥加密,公钥解密)MD5加密SHA加密