| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- using System;
- using System.Runtime.InteropServices;
- using UnityEngine;
- using UnityEngine.UI;
- using System.ComponentModel;
- public class DES : MonoBehaviour
- {
- // 声明外部函数
- // [DllImport("libdes")]
- [DllImport("libdes")]
- private static extern void des_setkey([MarshalAs(UnmanagedType.LPArray, SizeConst = 8)] byte[] key);
- // 声明外部函数
- [DllImport("libdes")]
- private static extern void des_run([In][Out] byte[] outArray, [MarshalAs(UnmanagedType.LPArray, SizeConst = 64)] byte[] inArray, bool type);
- // 密文:AA 08 E6 B4 AB 92 DC 68 66 A3
- // 明文:AA 08 5A 00 C0 04 02 44 05 00
- // byte[] des_key={0x01,0x23,0x3e,0xa1,0xb2,0xc3,0xd4,0xe5 };
- private void Start()
- {
- try
- {
- // 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
- // 一个示例key数组
- byte[] keyArray = { 0x01, 0x23, 0x3E, 0xA1, 0xB2, 0xC3, 0xD4, 0xE5 };
- // 调用外部函数
- des_setkey(keyArray);
- // byte[] aArray = new byte[8];
- // for(int i=0;i<8;i++)
- // {
- // aArray[i] =
- // byte[] outArray = new byte[8];
- // des_run(outArray, inArray, false);
- // }
- //byte[] outArray = Decrypt(inArray);
- //byte[] outArray = Decrypt(new byte[] { 0xf2, 0xd7 });
- //Debug.Log("解密结果1=" + BitConverter.ToString(outArray));
- //Debug.Log("解密结果2 URL= " + System.Text.Encoding.ASCII.GetString(outArray));
- }
- catch (Exception e)
- {
- Debug.Log(e.ToString());
- }
- }
- public byte[] Encryption(byte[] inArray, byte DataLen)
- {
- int inArrayLen = inArray.GetLength(0);
- byte[] outArray = new byte[inArrayLen + 2];
- outArray[0] = 0xAA;
- outArray[1] = DataLen;
- byte[] aOutArray = new byte[inArrayLen];
- des_run(aOutArray, inArray, false);
- for (int i = 0; i < inArrayLen; i++)
- {
- outArray[i + 2] = aOutArray[i];
- }
- return outArray;
- }
- public byte[] Decrypt(byte[] inArray)
- {
- int inArrayLen = inArray.GetLength(0);
- byte[] newArray = new byte[inArrayLen - 2];
- int newArrayLen = newArray.GetLength(0);
- for (int i = 0; i < newArrayLen; i++)
- {
- newArray[i] = inArray[i + 2];
- }
- // Debug.Log("解密结果3="+BitConverter.ToString(aArray));
- byte[] outArray = new byte[newArrayLen];
- int aLen = newArrayLen / 8;
- for (int i = 0; i < aLen; i++)
- {
- byte[] aArray = new byte[8];
- for (int j = 0; j < 8; j++)
- {
- aArray[j] = newArray[i * 8 + j];
- }
- byte[] aOutArray = new byte[8];
- des_run(aOutArray, aArray, true);
- for (int j = 0; j < 8; j++)
- {
- outArray[i * 8 + j] = aOutArray[j];
- }
- }
- return outArray;
- }
- }
|