encrypt_utils.dart 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import 'dart:convert';
  2. //data [0-256)
  3. //return [0-256)
  4. List<int> encrypt(List data, String key) {
  5. var mapTable = getSortTable(key);
  6. List<int> result = [];
  7. for(var i=0; i<data.length; i++){
  8. var targetVal = mapTable[data[i]];
  9. //print("${data[i]}==>${targetVal}");
  10. result.add(targetVal);
  11. }
  12. return result;
  13. }
  14. //data base64
  15. //return base64
  16. List<int> decrypt(List data, String key) {
  17. var mapTable = getSortTableDec(key);
  18. List<int> result = [];
  19. for(var i=0; i<data.length; i++){
  20. var targetVal = mapTable[data[i]];
  21. result.add(targetVal);
  22. }
  23. return result;
  24. }
  25. Map getSortTableDec(String key) {
  26. var mapTable = getSortTable(key);
  27. var mapTableDec = Map<int, int>();
  28. mapTable.forEach((key, value){
  29. mapTableDec[value] = key;
  30. });
  31. return mapTableDec;
  32. }
  33. Map getSortTable(String key) {
  34. var mapTable = Map<int, int>();
  35. for(var i=0; i<=0xff; i++) {
  36. mapTable[i] = i;
  37. }
  38. List<int> bytes = utf8.encode(key);
  39. for(var i=0; i<0xff; i++) {
  40. var val = randNum(bytes, i + 10, i + 1, 0xff + 1);
  41. int tmpVal = mapTable[val]!;
  42. mapTable[val] = mapTable[i]!;
  43. mapTable[i] = tmpVal;
  44. }
  45. return mapTable;
  46. }
  47. //[start, end)
  48. int randNum(List<int> bytes, int index, int start, int end) {
  49. int total = 0;
  50. for (var i=0; i<bytes.length; i++) {
  51. total += bytes[i] + index;
  52. }
  53. if(total < 0) {
  54. total = total * -1;
  55. }
  56. var result = start + (total % (end - start));
  57. return result;
  58. }