37 lines
981 B
Dart
37 lines
981 B
Dart
// 定义密钥
|
|
import 'dart:convert';
|
|
|
|
List skey = [8, 1, 2, 5, 4];
|
|
|
|
// 单个字符异或运算
|
|
String makecodeChar(String c, int key, int key2) {
|
|
int charCode = c.codeUnitAt(0);
|
|
charCode = (((charCode + key) ^ key2) ^ key) + 1;
|
|
return String.fromCharCode(charCode);
|
|
}
|
|
|
|
// 单个字符解密
|
|
String cutcodeChar(String c, int key, int key2) {
|
|
int charCode = c.codeUnitAt(0);
|
|
int decryptedCharCode = (((charCode - 1) ^ key) ^ key2) - key;
|
|
return String.fromCharCode(decryptedCharCode);
|
|
}
|
|
|
|
// 加密
|
|
String makecode(String pstr, List pkey) {
|
|
String pp = pstr;
|
|
for (int i = 0; i < pp.length; i++) {
|
|
pp = pp.replaceRange(i, i + 1, makecodeChar(pp[i], pkey[i % 5], pkey[(i + 18) % 5]));
|
|
}
|
|
return pp;
|
|
}
|
|
|
|
// 解密
|
|
String cutecode(List<int> pstr) {
|
|
int len = pstr.length;
|
|
for (int i = 0; i < len; i++) {
|
|
pstr[i] = cutcodeChar(String.fromCharCode(pstr[i])
|
|
, skey[i % 5], skey[(i + 18) % 5]).codeUnitAt(0);
|
|
}
|
|
return String.fromCharCodes(pstr);
|
|
} |