您可以仅基于十六进制来执行此操作 - 首先您需要编写(或复制/使用)一个实用方法来将您的十六进制字符串转换为字节数组(这将取决于您的十六进制字符串的格式) - 示例下面用于转换由冒号分隔的字符串(例如“1d:c1:5a:71:c4:8e:a3:ff:01:0a:3b:46:17:6f:e1:52”)
public static byte[] ConvertFingerprintToByteArray( String fingerprint )
{
return fingerprint.Split( ':' ).Select( s => Convert.ToByte( s, 16 ) ).ToArray();
}
然后,您只需附加到对象的HostKeyReceived
事件SftpClient
。
SftpClient sftpClient = new SftpClient( Hostname, Username, Password );
sftpClient.HostKeyReceived += delegate ( object sender, HostKeyEventArgs e )
{
var b = ConvertFingerprintToByteArray(
"1d:c1:5a:71:c4:8e:a3:ff:01:0a:3b:46:17:6f:e1:52" );
if( e.FingerPrint.SequenceEqual( b ) )
e.CanTrust = true;
else
e.CanTrust = false;
};
如果此检查失败,则 SSH.NET 将抛出SshConnectionException
- 并显示“密钥交换协商失败”的消息。
希望这可以帮助。