DES.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. using System;
  2. using System.Runtime.InteropServices;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. using System.ComponentModel;
  6. public class DES : MonoBehaviour
  7. {
  8. // 声明外部函数
  9. // [DllImport("libdes")]
  10. [DllImport("libdes")]
  11. private static extern void des_setkey([MarshalAs(UnmanagedType.LPArray, SizeConst = 8)] byte[] key);
  12. // 声明外部函数
  13. [DllImport("libdes")]
  14. private static extern void des_run([In][Out] byte[] outArray, [MarshalAs(UnmanagedType.LPArray, SizeConst = 64)] byte[] inArray, bool type);
  15. // 密文:AA 08 E6 B4 AB 92 DC 68 66 A3
  16. // 明文:AA 08 5A 00 C0 04 02 44 05 00
  17. // byte[] des_key={0x01,0x23,0x3e,0xa1,0xb2,0xc3,0xd4,0xe5 };
  18. private void Start()
  19. {
  20. try
  21. {
  22. // AA - 40 - 22 - 8F - 80 - 2C - 1B - 70 - 5C - 3F - CE - D7 - FE - 12 - 5B - 5F - C3 - D7 - 95 - 98 - 74 - AE - 9D - D3 - 33 - F7 - 64 - 12 - 14 - 92 - 4A - 22 - 56 - BE - F9 - 54 - E2 - DD - 90 - D2 - CD - B6 - 3A - 64 - 44 - 1D - 64 - 98 - C6 - AC - 66 - 15 - 14 - EA - 39 - 35 - 79 - EF - 74 - 1C - AC - D0 - 9A - 51 - F2 - D7
  23. // 一个示例key数组
  24. byte[] keyArray = { 0x01, 0x23, 0x3E, 0xA1, 0xB2, 0xC3, 0xD4, 0xE5 };
  25. // 调用外部函数
  26. des_setkey(keyArray);
  27. // byte[] aArray = new byte[8];
  28. // for(int i=0;i<8;i++)
  29. // {
  30. // aArray[i] =
  31. // byte[] outArray = new byte[8];
  32. // des_run(outArray, inArray, false);
  33. // }
  34. //byte[] outArray = Decrypt(inArray);
  35. //byte[] outArray = Decrypt(new byte[] { 0xf2, 0xd7 });
  36. //Debug.Log("解密结果1=" + BitConverter.ToString(outArray));
  37. //Debug.Log("解密结果2 URL= " + System.Text.Encoding.ASCII.GetString(outArray));
  38. }
  39. catch (Exception e)
  40. {
  41. Debug.Log(e.ToString());
  42. }
  43. }
  44. public byte[] Encryption(byte[] inArray, byte DataLen)
  45. {
  46. int inArrayLen = inArray.GetLength(0);
  47. byte[] outArray = new byte[inArrayLen + 2];
  48. outArray[0] = 0xAA;
  49. outArray[1] = DataLen;
  50. byte[] aOutArray = new byte[inArrayLen];
  51. des_run(aOutArray, inArray, false);
  52. for (int i = 0; i < inArrayLen; i++)
  53. {
  54. outArray[i + 2] = aOutArray[i];
  55. }
  56. return outArray;
  57. }
  58. public byte[] Decrypt(byte[] inArray)
  59. {
  60. int inArrayLen = inArray.GetLength(0);
  61. byte[] newArray = new byte[inArrayLen - 2];
  62. int newArrayLen = newArray.GetLength(0);
  63. for (int i = 0; i < newArrayLen; i++)
  64. {
  65. newArray[i] = inArray[i + 2];
  66. }
  67. // Debug.Log("解密结果3="+BitConverter.ToString(aArray));
  68. byte[] outArray = new byte[newArrayLen];
  69. int aLen = newArrayLen / 8;
  70. for (int i = 0; i < aLen; i++)
  71. {
  72. byte[] aArray = new byte[8];
  73. for (int j = 0; j < 8; j++)
  74. {
  75. aArray[j] = newArray[i * 8 + j];
  76. }
  77. byte[] aOutArray = new byte[8];
  78. des_run(aOutArray, aArray, true);
  79. for (int j = 0; j < 8; j++)
  80. {
  81. outArray[i * 8 + j] = aOutArray[j];
  82. }
  83. }
  84. return outArray;
  85. }
  86. }