- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编写可以远程更改另一个盒子上的 RealVNC 密码的 C# 应用程序。
目前有效的是,我可以从一个已经更改过的盒子中提取密码,将其存储为十六进制字符串,然后将其发送到另一个盒子,然后以这种方式更改密码,但我需要能够更改密码或即时随机化密码。
我在创建正确的二进制文件以放入注册表时遇到问题。
我知道 VNC key :
byte[] Key = { 23, 82, 107, 6, 35, 78, 88, 7 };
因此使用上面的 key 并传递“1234”作为使用以下代码加密的密码:
public static byte[] EncryptTextToMemory(string Data, byte[] Key)
{
try
{
MemoryStream mStream = new MemoryStream()
DESCryptoServiceProvider desProvider = new DESCryptoServiceProvider();
desProvider.Mode = CipherMode.ECB;
desProvider.Key = Key;
CryptoStream cStream = new CryptoStream(mStream,
desProvider.CreateEncryptor(),
CryptoStreamMode.Write);
byte[] toEncrypt = new ASCIIEncoding().GetBytes(Data);
cStream.Write(toEncrypt, 0, toEncrypt.Length);
cStream.FlushFinalBlock();
byte[] ret = mStream.ToArray();
cStream.Close();
mStream.Close();
return ret;
}
catch (CryptographicException ex)
{
MessageBox.Show("A Cryptographic error occurred: " + ex.Message);
return null;
}
将返回的字节数组传递给 BitConverter.ToString
后,我希望获得与 RealVNC 本身已设置为 1234 的密码注册表中存储的相同的十六进制值,但我不是。
最佳答案
这是我加密/解密 VNC 密码的来源:
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;
不记得我从哪里得到的代码。我不是原作者。
关于c# - 编码/解码 RealVNC 密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7855238/
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
我想知道 RealVNC 远程查看器是如何工作的。 它经常实时向客户端发送屏幕截图? 还是使用其他方法? 最佳答案 作为一个非常高级的概述,有两种类型的 VNC 服务器: 抓屏。这些服务器会将当前显示
我正在尝试编写可以远程更改另一个盒子上的 RealVNC 密码的 C# 应用程序。 目前有效的是,我可以从一个已经更改过的盒子中提取密码,将其存储为十六进制字符串,然后将其发送到另一个盒子,然后以这种
我真的很喜欢 RealVnc Connect 概念,因为它允许我联系防火墙后面的设备等。我正在寻找类似的 SSH 选项。有什么建议吗? 最佳答案 我自己在这里找到了很多替代方案: https://al
当我尝试在 arch Linux 上启动 realvnc-vnc-viewer 时,依赖项 (libcrypt.so.1) 丢失了。每次我尝试使用命令行启动 vnc-viewer 时都会提示这些错误:
我是一名优秀的程序员,十分优秀!