SSH.cs
上传用户:szltgg
上传日期:2019-05-16
资源大小:604k
文件大小:5k
源码类别:

Telnet服务器

开发平台:

C#

  1. /*
  2.  Copyright (c) 2005 Poderosa Project, All Rights Reserved.
  3.  $Id: SSH.cs,v 1.2 2005/04/20 09:06:04 okajima Exp $
  4. */
  5. using System;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using Poderosa.ConnectionParam;
  9. using Granados.SSHC;
  10. using Granados.PKI;
  11. namespace Poderosa.SSH
  12. {
  13. //Granados傪巊偆傗偮偼偙偪傜丂婲摦帪偵偼儘乕僪偟側偄傛偆偵偡傞偨傔
  14. public class LocalSSHUtil {
  15. public static CipherAlgorithm ParseCipherAlgorithm(string t) {
  16. if(t=="AES128")
  17. return CipherAlgorithm.AES128;
  18. else if(t=="Blowfish")
  19. return CipherAlgorithm.Blowfish;
  20. else if(t=="TripleDES")
  21. return CipherAlgorithm.TripleDES;
  22. else
  23. throw new Exception("Unknown CipherAlgorithm " + t);
  24. }
  25. public static CipherAlgorithm[] ParseCipherAlgorithm(string[] t) {
  26. CipherAlgorithm[] ret = new CipherAlgorithm[t.Length];
  27. int i = 0;
  28. foreach(string a in t) {
  29. ret[i++] = ParseCipherAlgorithm(a);
  30. }
  31. return ret;
  32. }
  33. public static string[] FormatPublicKeyAlgorithmList(PublicKeyAlgorithm[] value) {
  34. string[] ret = new string[value.Length];
  35. int i=0;
  36. foreach(PublicKeyAlgorithm a in value)
  37. ret[i++] = a.ToString();
  38. return ret;
  39. }
  40. public static CipherAlgorithm[] ParseCipherAlgorithmList(string value) {
  41. return ParseCipherAlgorithm(value.Split(','));
  42. }
  43. public static PublicKeyAlgorithm ParsePublicKeyAlgorithm(string t) {
  44. if(t=="DSA")
  45. return PublicKeyAlgorithm.DSA;
  46. else if(t=="RSA")
  47. return PublicKeyAlgorithm.RSA;
  48. else
  49. throw new Exception("Unknown CipherAlgorithm " + t);
  50. }
  51. public static PublicKeyAlgorithm[] ParsePublicKeyAlgorithm(string[] t) {
  52. PublicKeyAlgorithm[] ret = new PublicKeyAlgorithm[t.Length];
  53. int i = 0;
  54. foreach(string a in t) {
  55. ret[i++] = ParsePublicKeyAlgorithm(a);
  56. }
  57. return ret;
  58. }
  59. public static PublicKeyAlgorithm[] ParsePublicKeyAlgorithmList(string value) {
  60. return ParsePublicKeyAlgorithm(value.Split(','));
  61. }
  62. public static string SimpleEncrypt(string plain) {
  63. byte[] t = Encoding.ASCII.GetBytes(plain);
  64. if((t.Length % 16)!=0) {
  65. byte[] t2 = new byte[t.Length + (16 - (t.Length % 16))];
  66. Array.Copy(t, 0, t2, 0, t.Length);
  67. for(int i=t.Length+1; i<t2.Length; i++) //巆傝偼僟儈乕
  68. t2[i] = t[i % t.Length];
  69. t = t2;
  70. }
  71. byte[] key = Encoding.ASCII.GetBytes("- BOBO VIERI 32-");
  72. Granados.Crypto.Rijndael rijndael = new Granados.Crypto.Rijndael();
  73. rijndael.InitializeKey(key);
  74. byte[] e = new byte[t.Length];
  75. rijndael.encryptCBC(t, 0, t.Length, e, 0);
  76. return Encoding.ASCII.GetString(Granados.Toolkit.Base64.Encode(e));
  77. }
  78. public static string SimpleDecrypt(string enc) {
  79. byte[] t = Granados.Toolkit.Base64.Decode(Encoding.ASCII.GetBytes(enc));
  80. byte[] key = Encoding.ASCII.GetBytes("- BOBO VIERI 32-");
  81. Granados.Crypto.Rijndael rijndael = new Granados.Crypto.Rijndael();
  82. rijndael.InitializeKey(key);
  83. byte[] d = new byte[t.Length];
  84. rijndael.decryptCBC(t, 0, t.Length, d, 0);
  85. return Encoding.ASCII.GetString(d); //僷僨傿儞僌偑偁偭偰傕NULL暥帤偵側傞偺偱彍嫀偝傟傞偼偢
  86. }
  87. }
  88. //尞偺僠僃僢僋娭學
  89. public enum KeyCheckResult {
  90. OK,
  91. Different,
  92. NotExists
  93. }
  94. public interface ISSHKnownHosts {
  95. KeyCheckResult Check(SSHTerminalParam param, string server_key);
  96. void Update(SSHTerminalParam param, string server_key);
  97. }
  98. public class DefaultSSHKnownHosts : ISSHKnownHosts {
  99. public virtual KeyCheckResult Check(SSHTerminalParam param, string server_key) {
  100. return KeyCheckResult.OK;
  101. }
  102. public virtual void Update(SSHTerminalParam param, string server_key) {
  103. }
  104. }
  105. public class HostKeyChecker {
  106. private IWin32Window _parentForm;
  107. private SSHTerminalParam _tryingParam;
  108. public HostKeyChecker(IWin32Window parent, SSHTerminalParam param) {
  109. _parentForm = parent;
  110. _tryingParam = param;
  111. }
  112. public bool CheckHostKeyCallback(SSHConnectionInfo ci) {
  113.             /*
  114. string keystr = ci.DumpHostKeyInKnownHostsStyle();
  115. KeyCheckResult r = GEnv.SSHKnownHosts.Check(_tryingParam, keystr);
  116. if(r==KeyCheckResult.NotExists) {
  117. if(GEnv.InterThreadUIService.AskUserYesNo(GEnv.Strings.GetString("Message.HostKeyChecker.AskHostKeyRegister"))==DialogResult.Yes) {
  118. GEnv.SSHKnownHosts.Update(_tryingParam, keystr);
  119. return true;
  120. }
  121. else
  122. return false;
  123. }
  124. else if(r==KeyCheckResult.Different) {
  125. if(GEnv.InterThreadUIService.AskUserYesNo(GEnv.Strings.GetString("Message.HostKeyChecker.AskHostKeyRenew"))==DialogResult.Yes) {
  126. GEnv.SSHKnownHosts.Update(_tryingParam, keystr);
  127. return true;
  128. }
  129. else
  130. return false;
  131. }
  132. else
  133. return true;
  134.             */
  135.             return true;
  136. }
  137. }
  138. }