易语言CNA算法实现快速加密解密文件的代码

CNA文件加解密数据算法

.版本 2
.支持库 spec
.支持库 iext
.程序集 窗口程序集_启动窗口
.子程序 __启动窗口_创建完毕
.局部变量 code, 字节集, , , 加密密码
.局部变量 test, 字节集, , , 要加密码的数据字节集
.局部变量 i, 整数型, , , 查看反馈信息
' 简单例子
test = 到字节集 (“aaaaaaa aaa.*#(中。329}@#¥”)
code = 到字节集 (“中。有 3a#”)
CNA数据 (test, code, 1)
调试输出 (到文本 (test))
CNA数据 (test, code, )
调试输出 (到文本 (test))
' 直接用一个文件进行加解密测试。功能完整的。
.子程序 CNA数据, 整数型, , 返回数1表示加密完成,返回0表示解密完成,返回10表示加密或解密码失败
.参数 数据集, 字节集, 可空, 要加密的数据集
.参数 密码集, 字节集, 可空, 要加密的密码集
.参数 方式, 整数型, 可空, 1是加密,0或省略是解密
.局部变量 j, 整数型, , , 计次变量
.局部变量 i, 整数型, , , 密码集长度
.局部变量 k, 整数型, , , 数据集长度
.局部变量 lk, 整数型, , , 计算对换对换位置变量
.局部变量 t, 整数型, , , 计算对换对换位置变量
.局部变量 对换位置组, 整数型, , "0", 存放8个位置数据
.局部变量 临时变量, 字节集, , , 临时存放变量
.局部变量 密码叠加量, 整数型, , , 密码叠加变量
.局部变量 随机数, 整数型, , , 随机变量
.局部变量 随机变量集, 字节集, , , 随机变量字节集
.局部变量 单个对换位置, 整数型, , , 存放单个对换位置
' 限制只加密大于大于或等于10字节以上长度的文件,密码可以和文件一样长,如果比文件长,那多出部分只能累加到密码叠加量里,不能在数据集加密中进行混合
' 小于10字节的文件可自行调整参数和算法
.如果真 (方式 = 1 且 取字节集长度 (数据集) ≥ 10 且 取字节集长度 (密码集) ≥ 1) ' >>>>>>>>>>>>>加密开始
  ' ----------------------------------(1)计算密码叠加量
  j = 取字节集长度 (密码集)
  .计次循环首 (j, i)
    密码叠加量 = 密码集 [i] + 密码叠加量 + i × 15
  .计次循环尾 ()
  lk = 密码叠加量 ' ---用于计算对换位置时使用
  ' ----------------------------------(2)引入固定8位数随机变量
  置随机数种子 ()
  随机数 = 取随机数 (10000000, 98999999)
  ' ----------------------------------(3)开始数据集加密
  j = 取字节集长度 (密码集)
  .计次循环首 (取字节集长度 (数据集), i) ' ------开始加密数据
    数据集 [i] = 数据集 [i] + 密码集 [j] + 密码叠加量 + 随机数
    j = j - 1
    .如果真 (j = 0)
      j = 取字节集长度 (密码集)
    .如果真结束
  .计次循环尾 ()
  ' ----------------------------------(4)开始把随机数转换随机变量集加密,再合并到数据集中
  随机数 = 随机数 + 密码叠加量 ' ------第一次简单混合加密
  随机变量集 = 到字节集 (到文本 (随机数))
  j = 取字节集长度 (密码集)
  .计次循环首 (取字节集长度 (随机变量集), i) ' ------开始第二次加密随机变量集
    随机变量集 [i] = 随机变量集 [i] + 密码集 [j] + 密码叠加量
    j = j - 1
    .如果真 (j = 0)
      j = 取字节集长度 (密码集)
    .如果真结束
  .计次循环尾 ()
  数据集 = 数据集 + 随机变量集 ' ------数据集和随机变量集合并
  ' ----------------------------------(5)通过对数据集长度和密码叠加变量的比例算法求出对换位置
  t = 取字节集长度 (数据集)
  .计次循环首 (8, i) ' ------先通过和密码叠加变量计算出对应位置
    加入成员 (对换位置组, t × lk ÷ (lk + t))
    t = t - 1.69
    lk = lk × 0.459
  .计次循环尾 ()
  ' ----------------------------------(6)开始对换随机变量集在数据集里的位置
  k = 取字节集长度 (数据集)
  临时变量 = 取空白字节集 (1)
  .计次循环首 (8, i) ' ------ 开始对换
    单个对换位置 = 对换位置组 [i]
    临时变量 [1] = 数据集 [单个对换位置]
    数据集 [单个对换位置] = 数据集 [k]
    数据集 [k] = 临时变量 [1]
    k = k - 1
  .计次循环尾 ()
  返回 (1)
.如果真结束
.如果真 (方式 = 0 且 取字节集长度 (数据集) ≥ 10 且 取字节集长度 (密码集) ≥ 1) ' --------------------解密
  ' ----------------------------------(1)计算密码叠加量,和加密部分(1)一样
  j = 取字节集长度 (密码集)
  .计次循环首 (j, i)
    密码叠加量 = 密码集 [i] + 密码叠加量 + i × 15
  .计次循环尾 ()
  lk = 密码叠加量 ' ---用于计算对换位置时使用
  ' ----------------------------------(2)通过对数据集长度和密码叠加变量的比例算法求出对换位置,和加密码部分(5)一样
  t = 取字节集长度 (数据集)
  .计次循环首 (8, i)
    加入成员 (对换位置组, t × lk ÷ (lk + t))
    t = t - 1.69
    lk = lk × 0.459
  .计次循环尾 ()
  ' ----------------------------------(3)开始对换随机变量集在数据集里的位置,并把数据集和随机变量集切分出来,对换位置和加密部分(6)略有不同
  k = 取字节集长度 (数据集) - 7 ' ------ 开始反向对换
  临时变量 = 取空白字节集 (1)
  .计次循环首 (8, i)
    单个对换位置 = 对换位置组 [9 - i] ' ------ 开始反向对换
    临时变量 [1] = 数据集 [单个对换位置]
    数据集 [单个对换位置] = 数据集 [k]
    数据集 [k] = 临时变量 [1]
    k = k + 1
  .计次循环尾 ()
  k = 取字节集长度 (数据集)
  随机变量集 = 取字节集右边 (数据集, 8) ' ------ 分割出随机变量集
  数据集 = 取字节集中间 (数据集, 1, k - 8) ' ------ 分割出数据集
  ' ----------------------------------(4)开始解密出随机数,和加密部分(4)取反向操作
  j = 取字节集长度 (密码集)
  .计次循环首 (取字节集长度 (随机变量集), i)
    随机变量集 [i] = 随机变量集 [i] - 密码集 [j] - 密码叠加量
    j = j - 1
    .如果真 (j = 0)
      j = 取字节集长度 (密码集)
    .如果真结束
  .计次循环尾 ()
  随机数 = 到数值 (到文本 (随机变量集))
  随机数 = 随机数 - 密码叠加量
  ' ----------------------------------(5)开始解密数据集,和加密部分(3)取反向操作
  j = 取字节集长度 (密码集)
  .计次循环首 (取字节集长度 (数据集), i)
    数据集 [i] = 数据集 [i] - 密码集 [j] - 密码叠加量 - 随机数
    j = j - 1
    .如果真 (j = 0)
      j = 取字节集长度 (密码集)
    .如果真结束
  .计次循环尾 ()
  返回 (0)
.如果真结束
返回 (10)
.子程序 _打开文件加密_被单击
.局部变量 file1, 整数型, , , 要加密的文件号
.局部变量 file2, 整数型, , , 加密后新建的文件号
.局部变量 code, 字节集, , , 要加密码的密码
.局部变量 exc, 文本型, , "0", 取文件名格式用
.局部变量 文件长度, 长整数型, , , 要加密的文件大小
.局部变量 循环次数, 整数型, , , 加密循环次数
.局部变量 FSO, 对象, , , 用于读取文件属性信息
.局部变量 GetFile, 对象, , , 用于读取文件属性信息
.局部变量 temp, 字节集, , , 临时存放字节集
.局部变量 i, 整数型, , , 提示加密进度用
' 加密时是以80万计/次读入数据的,每次循环加密后的文件都会多出8字节的随机密匙,所以解密时要以80.008万/次读入数据。
code = 到字节集 (密码编辑框.内容)
.如果真 (通用对话框1.打开 ())
  file1 = 打开文件 (通用对话框1.文件名, #读写, )
  FSO.创建 (“Scripting.FileSystemObject”, )
  GetFile = FSO.对象型方法 (“GetFile”, 通用对话框1.文件名)
  文件长度 = GetFile.读数值属性 (“Size”, )
  exc = 分割文本 (通用对话框1.文件名, “\”, )
  file2 = 打开文件 (取当前目录 () + “\CNA+” + exc [取数组成员数 (exc)], #改写, )
  状态条1.置文本 (0, “状态:正在加密..”)
  状态条1.置文本 (1, “文件:” + 到文本 (exc [取数组成员数 (exc)]))
  循环次数 = 到整数 (文件长度 \ 800000) + 1
  .计次循环首 (循环次数, i)
    temp = 读入字节集 (file1, 800000)
    CNA数据 (temp, code, 1)
    写出字节集 (file2, temp)
    状态条1.置文本 (2, “进度:” + 到文本 (取整 (i ÷ 循环次数 × 100)) + “%”) ' -----进度显示以百分比方式显现
  .计次循环尾 ()
  状态条1.置文本 (0, “状态:加密完成”)
  关闭文件 (file2)
  关闭文件 (file1)
.如果真结束
.子程序 _打开文件解密_被单击
.局部变量 file1, 整数型, , , 要加密的文件号
.局部变量 file2, 整数型, , , 加密后新建的文件号
.局部变量 code, 字节集, , , 要加密码的密码
.局部变量 exc, 文本型, , "0", 取文件名格式用
.局部变量 文件长度, 长整数型, , , 要加密的文件大小
.局部变量 循环次数, 整数型, , , 解密循环次数
.局部变量 FSO, 对象, , , 用于读取文件属性信息
.局部变量 GetFile, 对象, , , 用于读取文件属性信息
.局部变量 temp, 字节集, , , 临时存放字节集
.局部变量 i, 整数型, , , 提示加密进度用
' 注意: 加密时是以80万计/次读入数据的,每次循环加密后的文件都会多出8字节的随机密匙,所以解密时要以80.008万/次读入数据。
code = 到字节集 (密码编辑框.内容)
.如果真 (通用对话框1.打开 ())
  file1 = 打开文件 (通用对话框1.文件名, #读写, )
  FSO.创建 (“Scripting.FileSystemObject”, )
  GetFile = FSO.对象型方法 (“GetFile”, 通用对话框1.文件名)
  文件长度 = GetFile.读数值属性 (“Size”, )
  exc = 分割文本 (通用对话框1.文件名, “\”, )
  file2 = 打开文件 (取当前目录 () + “\CNA-” + exc [取数组成员数 (exc)], #改写, )
  状态条1.置文本 (0, “状态:正在解密..”)
  状态条1.置文本 (1, “文件:” + 到文本 (exc [取数组成员数 (exc)]))
  循环次数 = 到整数 (文件长度 \ 800008) + 1 ' 注意要多出8字节
  .计次循环首 (循环次数, i)
    temp = 读入字节集 (file1, 800008) ' 看文件大小读入多少字节,如果文件非常大,则可以通过移动文件指针方式分段进行加密
    CNA数据 (temp, code, )
    写出字节集 (file2, temp)
    状态条1.置文本 (2, “进度:” + 到文本 (取整 (i ÷ 循环次数 × 100)) + “%”) ' -----进度显示以百分比方式显现
  .计次循环尾 ()
  状态条1.置文本 (0, “状态:解密完成”)
  关闭文件 (file1)
  关闭文件 (file2)
.如果真结束

运行结果:

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接

(0)

相关推荐

  • 易语言实现文件夹加密的代码

    加密锁上文件夹 此功能需要加载精易模块5.6 .版本 2 .支持库 shell .支持库 spec .支持库 dp1 .程序集 窗口程序集1 .程序集变量 密码, 文本型 .子程序 _按钮_浏览文件_被单击 编辑框_路径.内容 = 浏览文件夹 ("打开你需要加密的文件", ) .子程序 _按钮_加密_被单击 .局部变量 文件夹名称, 文本型 .判断开始 (寻找文本 (编辑框_路径.内容, "[已加密]", , 假) ≠ -1) 提示框 ("已加密"

  • 详解易语言字节集动态加密

    原理很简单: 字节集1(n位随机字节集) 字节集2(m位随机字节集) 被加密字节集=字节集1+被加密字节集+字节集2 被加密字后的字节集=加密(被加密字节集,密码) 解密后的字节集=解密(被解密字节集,密码) 解密后的字节集=字节集1+被加密字节集+字节集2 解密后的字节集=取字节集中间(解密后的字节集,n+1,取字节集长度 (解密后的字节集) -m-n) .版本 2 .支持库 dp1 .子程序 加密_加密or解密, 字节集 .参数 字节集数据, 字节集 .参数 加密or解密, 整数型, , 1

  • 易语言给文件加密的方法

    易语言加密文件夹源码例程程序结合易语言扩展界面支持库和操作系统界面功能支持库,实现文件夹的加密. 1.打开易语言软件 2.创建一个像我一样的窗口 当然也可以自己设计一些很好看的. 3.然后写出各个控件的执行命令源码 4.然后再点击上方的运行按钮 5.没有出问题,就会运行成功. 6.然后再编译软件,两个编译任选一个进行编译. 7.编译成功就会显示软件了. 总结:以上就是关于易语言对文件进行加密的内容,感谢大家的阅读和对我们的支持.

  • 总结易语言MD5加密16位和32位方法

    以下是小编整理的方法内容: 取数据摘要 (到字节集 (文本)) 这个取到的是32位的 取文本中间 (取数据摘要 (到字节集 (文本)), 9, 16) 这个取到的是16位的 方法很简单,大家需要自己在程序中测试以下,感谢大家对我们的支持.

  • 详解易语言调用js实现md5加密方法

    易语言调用js需要用到拓展组件的脚本组件, 在窗口创建完毕的事件里给脚本组件初始化设置下脚本组件的语言属性,在这里以JScript为例: 脚本组件执行脚本的简单方法是:  脚本组件1.执行 ()  然后根据需要调用的脚本函数   脚本组件1.运行 () 首先看下脚本组件1.执行 () 的参数和返回值: 调用格式: 〈逻辑型〉 对象.执行 (文本型 脚本代码) - 脚本语言支持组件->脚本组件 英文名称:Execute 执行指定的代码文本.返回真为执行正常,返回假为出错,错误信息可以从"错误

  • 易语言数据加密方法步骤

    互联网的时代同样是信息爆炸的时代,我们每天都在进行着数据传输和交换,数据的诞生,不仅丰富了我们的日常生活,而且更给我们的工作和学习带来了无尽的便利.殊不知,数据的安全是一个极其重要的问题,那么,如何保证信息数据的安全呢?今天,笔者就教大家使用易语言给数据加密,一起来学习吧! 1.运行"易语言"主程序,弹出"新建工程对话框"→"Windows窗口程序"→"确定",进入"Windows窗口程序工程界面". 2.

  • 易语言CNA算法实现快速加密解密文件的代码

    CNA文件加解密数据算法 .版本 2 .支持库 spec .支持库 iext .程序集 窗口程序集_启动窗口 .子程序 __启动窗口_创建完毕 .局部变量 code, 字节集, , , 加密密码 .局部变量 test, 字节集, , , 要加密码的数据字节集 .局部变量 i, 整数型, , , 查看反馈信息 ' 简单例子 test = 到字节集 ("aaaaaaa aaa.*#(中.329}@#¥") code = 到字节集 ("中.有 3a#") CNA数据 (t

  • 易语言调用API函数监视目录与文件的代码

    DLL命令表 .版本 2 .DLL命令 GetPrivateProfileInt, 整数型, , "GetPrivateProfileIntA" .参数 lpAppName, 文本型 .参数 lpKeyName, 文本型 .参数 nDefault, 整数型 .参数 lpFileName, 文本型 .DLL命令 GetPrivateProfileString, 整数型, , "GetPrivateProfileStringA" .参数 lpAppName, 文本型 .

  • PHP加密解密类实例代码

    关键代码如下所示: <?php function i_array_column($input, $columnKey, $indexKey=null){ if(!function_exists('array_column')){ $columnKeyIsNumber = (is_numeric($columnKey))?true:false; $indexKeyIsNull = (is_null($indexKey))?true :false; $indexKeyIsNumber = (is_n

  • Flutter RSA加密解密的示例代码

    目录 对称加密 非对称加密 第一步.首先pubspec.yaml中添加依赖 第二步.获取公钥私钥文件 第三步.在pubspec.yaml文件中添加公钥私钥文件. 第四步.实现Encrypt加密解密工具类 第五步.使用Encrypt工具类实现加密 第六步.项目实际需求, 第七步.关于秘钥的格式(非常重要) 第八步.使用Encrypt具类实现加密 数据加密有对称加密(对称密钥方案) 和非对称加密(公钥加密) 两种加密方式. 对称加密 在对称加密算法中,加密和解密密钥是相同的.通信双方必须具有相同的密

  • java使用RSA与AES加密解密的实例代码详解

    首先了解下,什么是堆成加密,什么是非对称加密? 对称加密:加密与解密的密钥是相同的,加解密速度很快,比如AES 非对称加密:加密与解密的秘钥是不同的,速度较慢,比如RSA •先看代码(先会用在研究) 相关依赖: <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> <version>1.58</versio

  • C#使用RSA加密解密文件

    本文实例为大家分享了C#使用RSA加密解密文件的具体代码,供大家参考,具体内容如下 加密代码: //加密代码,注意会覆盖原文件,里面有我的公钥,你要用时记得覆盖我的公钥 private bool encryptFile(string filename) { FileStream f; try { f = new FileStream(filename, FileMode.Open, FileAccess.ReadWrite, FileShare.Read); } catch { return f

  • Java实现md5和base64加密解密的示例代码

    import java.io.IOException; import java.security.MessageDigest; import sun.misc.BASE64Encoder; import sun.misc.BASE64Decoder; public class MD5Util { /** * MD5加密 */ public static String md5Encryption(String str) { MessageDigest md5 = null; try { md5 =

  • c# AES字节数组加密解密流程及代码实现

    AES类时微软MSDN中最常用的加密类,微软官网也有例子,参考链接:https://docs.microsoft.com/zh-cn/dotnet/api/system.security.cryptography.aes?view=netframework-4.8 但是这个例子并不好用,限制太多,通用性差,实际使用中,我遇到的更多情况需要是这样: 1.输入一个字节数组,经AES加密后,直接输出加密后的字节数组. 2.输入一个加密后的字节数组,经AES解密后,直接输出原字节数组. 对于我这个十八流

  • go GCM gin中间件的加密解密文件流处理

    目录 aes的gcm模式的加密和解密 验证 1.GET请求 2.看看post json 3验证postform aes的gcm模式的加密和解密 要给已有的系统启用加密解密,目前推荐的是aes的gcm模式的加密和解密,在微服务如果向前有公共方法处理 读取数据和写返回数据,那么比较简单,修改以前的公共方法,但是这样本地调试平时肯定是明文,所以要加判断,如果以前的读数据和写数据是五花八门那就比较麻烦,在微服务体系里面一般有网关这个服务,所以加密和解密就放在网关服务,大致如下: 常规的请求有GET,PO

  • Java实现Excel文件加密解密的示例代码

    目录 概述 示例大纲 工具 Java代码示例 示例1加密工作簿 示例2解密工作簿 示例3加密工作表 示例4加密工作表指定数据范围 示例5设置工作表公式隐藏 示例6解密Excel工作表 概述 设置excel文件保护时,通常可选择对整个工作簿进行加密保护,打开文件时需要输入密码:或者对指定工作表进行加密,即设置表格内容只读,无法对工作表进行编辑.另外,也可以对工作表特定区域设置保护,即设置指定区域可编辑或者隐藏数据公式,保护数据信息来源.无需设置文档保护时,可撤销密码保护,即解密文档.下面,将通过j

随机推荐