这个加密类很容易实现和使用。如果你需要加密字符串,如密码、汽车牌号等,就可以使用这个个快捷、简单、安全的方式。只要不暴露加密 key, 就会很安全。建议key 的长度最少为 12 个包含大小写的字符。
使用代码
首先下载源代码,将其中的类插入你的命名空间。然后你可以初始化类的对象。
加密
以下代码块是如何使用 key 变量yourencryptionkey 加密字符串变量 yourtextstring 的简单例子。
m2encryption.key = yourencryptionkey;m2encryption objencrypt = new m2encryption();objencrypt.cleartekst = yourtextstring; objencrypt.encrypt(); if (objencrypt.errorstate != -2) { messagebox.show(objencrypt.encryptedtekst);}
在做进一步处理前检查属性 objencrypt.errorstate 有无错误
errorstate-1:
这意味着加密的文本包含 ascii 以外的字符。在加密前,这些字符被更改为 ?
errorstate-2:
没有提供加密 key。加密过程会中断。
解密:
m2encryption.key = yourencryptionkey;m2encryption objencrypt = new m2encryption();objencrypt.encryptedtekst = yourtextstring; objencrypt.decrypt(); if (objencrypt.errorstate != -2) { messagebox.show(objencrypt.cleartekst);}
随机化
将属性 randomization 设置为 true,运行多次,同一个加密key 和平面文本会产生不同的加密文本
m2encryption.randomization = true;
快捷模式
设置为fastmode 模式会让加密/解密快捷,但是安全性会降低。如果你要加密小字符串,不应该启用该模式。如果加密很大的文件,可以。
注意,解密和加密的模式应该相同。
m2encryption.fastmode = true;
算法的内部工作原理
外部循环和内部循环
算法包含外部和内部循环。外部循环迭代次数,内部循环迭代平面文本中每个字符。
自变异内部和外部 key
自变异内部key
此 key 在内部加密流程中使用。key 中每个字母都哟牛股加密平面文本中对应的位置。当 key 的字符串结束后,该流程会使用自变异的key 版本继续进行,直至所有平面文本都加密完。看图1 说明。子变异的内部 key 标记为蓝色。
fig1. 上述的key永远不会重复
自变异外部 key
用户输入key 后,自变异的外部key 会初始化。该key会用于外部循环并在每次开始自改变。该key的目的是为每轮生成唯一的映射矩阵并在这些轮中初始化自变异内部key。映射数组在内部循环中的加密流程中使用。
6 轮迭代的key 自变化的例子:
函数 shufflearr() 将自变异key作为输入。根据key, 它会在 arrayint[] 中得出类似随机顺序的映射数字。函数每次调用,key 就会自变异,从而创建出新的唯一映射数组。
函数 shufflearr():
private void shufflearr(int state){ int keystep = 0; byte keychar; bool emptyfound; int retning = 1; long refindex = 1; double floatvalue; int intpart; double frapart; mutkey_o = selfmutatekey(mutkey_o, 3, state,1); for (int i = 0; i 95) { if (refindex - 95 94) refindex = 0; if (map[refindex] == 0) { map[refindex] = i; emptyfound = true; } } else { refindex--; if (refindex < 0) refindex = 94; if (map[refindex] == 0) { map[refindex] = i; emptyfound = true; } } } while (emptyfound == false); } keystep++; } for (int i = 0; i < 95; i++) { for (int k = 0; k lenkey - 1){ keyindexc = 0; mutkey_i = selfmutatekey(key,2,1,2);}
step 3:
生成引用索引号.
步骤 2 中的种子现在用作函数 createrefindex() 的输入
在这个函数中,种子经过这个公式:
种子除以 95
将小数的整数部分更改为 0
结果乘以 95
代码如下:
refindex = seed; if (refindex > 95){ if (refindex - 95 95) tegnchanged = tegnchanged - 95;tegnchanged = map[tegnchanged - 1];
全新的高性价比GSM模块 给WiFi模块市场带来新的冲击
小米无线蓝牙双模鼠标开售,采用静音按键设计
全新语音能力开发方案,它的核心优势是什么
超过800亿个物联网装置市场,智能家居占大头!
情人节送什么礼物给男朋友合适,爱运动当然选运动蓝牙耳机给他
基于M2加密算法深度解读
DTU工作过程详解以及DTU应用中的常见问题
强悍卖点三连发 iQOO旗舰级性能凶兽秀肌肉
集线器的传输速率
索尼推出PS3游戏机动感遥控器 挑战任天堂
大气治理的机遇下,新能源共享汽车发展迅速
LM2567+IR2111做的同步整流降压电路,LM2567+IR2111 step-down converter
格力手机惊现霸王销售模式 强制用户购买
RK3399开发板I2C4挂载EEPROM实例
国内竞争压力大 传苹果为下代iPhone定制双卡版
3D电子围栏搭建的小方法,使安防运维效率大幅提高
随着平安建设进程的稳步推进 我国安防行业保持了快速发展的势头
电缆屏蔽层的作用 电缆屏蔽层的种类和使用场景
1.7GHz双核小米升级版M1S曝光
关于区块链的预测有什么