[点晴永久免费OA]Encode/Decode RealVNC password
当前位置:点晴教程→点晴OA办公管理信息系统
→『 经验分享&问题答疑 』
下面是我收集的VNC密码加密和解密C#源代码: public static string EncryptVNC(string password) { if (password.Length > 8) { password = password.Substring(0, 8); } if (password.Length < 8) { password = password.PadRight(8, '\0'); } byte[] key = { 23, 82, 107, 6, 35, 78, 88, 7 }; byte[] passArr = new ASCIIEncoding().GetBytes(password); byte[] response = new byte[passArr.Length]; char[] chars = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; // reverse the byte order byte[] newkey = new byte[8]; for (int i = 0; i < 8; i++) { // revert desKey[i]: newkey[i] = (byte)( ((key[i] & 0x01) << 7) │ ((key[i] & 0x02) << 5) │ ((key[i] & 0x04) << 3) │ ((key[i] & 0x08) << 1) │ ((key[i] & 0x10) >> 1) │ ((key[i] & 0x20) >> 3) │ ((key[i] & 0x40) >> 5) │ ((key[i] & 0x80) >> 7) ); } key = newkey; // reverse the byte order DES des = new DESCryptoServiceProvider(); des.Padding = PaddingMode.None; des.Mode = CipherMode.ECB; ICryptoTransform enc = des.CreateEncryptor(key, null); enc.TransformBlock(passArr, 0, passArr.Length, response, 0); string hexString = String.Empty; for (int i = 0; i < response.Length; i++) { hexString += chars[response[i] >> 4]; hexString += chars[response[i] & 0xf]; } return hexString.Trim().ToLower(); } 然后是解密: public static string DecryptVNC(string password) { if (password.Length < 16) { return string.Empty; } byte[] key = { 23, 82, 107, 6, 35, 78, 88, 7 }; byte[] passArr = ToByteArray(password); byte[] response = new byte[passArr.Length]; // reverse the byte order byte[] newkey = new byte[8]; for (int i = 0; i < 8; i++) { // revert key[i]: newkey[i] = (byte)( ((key[i] & 0x01) << 7) │ ((key[i] & 0x02) << 5) │ ((key[i] & 0x04) << 3) │ ((key[i] & 0x08) << 1) │ ((key[i] & 0x10) >> 1) │ ((key[i] & 0x20) >> 3) │ ((key[i] & 0x40) >> 5) │ ((key[i] & 0x80) >> 7) ); } key = newkey; // reverse the byte order DES des = new DESCryptoServiceProvider(); des.Padding = PaddingMode.None; des.Mode = CipherMode.ECB; ICryptoTransform dec = des.CreateDecryptor(key, null); dec.TransformBlock(passArr, 0, passArr.Length, response, 0); return System.Text.ASCIIEncoding.ASCII.GetString(response); } 下面这个函数是必须的: public static byte[] ToByteArray(String HexString) { int NumberChars = HexString.Length; byte[] bytes = new byte[NumberChars / 2]; for (int i = 0; i < NumberChars; i += 2) { bytes[i / 2] = Convert.ToByte(HexString.Substring(i, 2), 16); } return bytes; } 在顶部加上: using System.Security.Cryptography;
该文章在 2018/1/2 18:04:14 编辑过 |
关键字查询
相关文章
正在查询... |