zoukankan      html  css  js  c++  java
  • 关于SSIS中解密FTP字符串的方法

    FTP(File Transfer Protocol),是文件传输协议的简称。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。用户可以通过它把自己的PC机与世界各地所有运行FTP协议的服务器相连,访问服务器上的大量程序和信息。

    而在SSIS中,有一个FTP的组件,可以对它进行信息的配置,包括用户名、密码、端口号等等,如下图:

    一般情况下,这些信息都是存在数据库中,然后通过SSIS菜单下的包配置来进行赋值,然而弊端就在于包配置信息无法直接读取加密信息,选择直接给FTP连接管理直接赋值的话,密码是无法保存的(PS:这是SSIS的一种自带保护机制),脚本是个好东西,在这里可以用来解决这个问题。

         在上一篇有写到DES加密解密的方法,这里就不做赘述了,其实最主要的是要获得FTP的这个对象,首先我想到的是用DTS对象的Connections["FTPName"]来获取整个连接信息,结果经过测试得到的只是:Server name 和 Server port 值,所以用Dts对象的Connections获取这条路走不通,只能想另外的办法。在 SQL Server 2012 Integration Services 高级教程(第二版) 中提到FtpClientConnected这个对象,测试可以通过

     ConnectionManager conn = default(ConnectionManager);
     FtpClientConnection ftp = default(FtpClientConnection);
    //获取FTP连接,名字保持一致,中文会导致乱码                
    conn = Dts.Connections["FTP Connection Manager"];
     ftp = new FtpClientConnection(conn.AcquireConnection(null));
    //ZCC为数据库中FTP连接信息表中的主键,获取密文密码
    string CryPwd = GetConDb("ZCC")[0];
    //对密文密码就行解密,得到明文
    string Oldpwd = DecryptDES(CryPwd, UUkey);
    //将解密后的密码赋值给FTP对应的参数
     ftp.ServerName = GetConDb("ZCC")[1];
     ftp.ServerPort = int.Parse(GetConDb("ZCC")[2]);
     ftp.ServerUserName = GetConDb("ZCC")[3];
     ftp.ServerPassword = Oldpwd;

    代码是其次,最主要的是思想,在这里我做得处理是,从数据库中取出来对应的 Server Name、Server Port、ServerUserName、ServerPassword,然后用拼接字符串的方式连一起,然后用Split分割成一个数组,当然也可以直接将这四个数据放到数组中,GetConDb就是一个返回类型为数组的方法,返回的数组就是这四个数值,所以当得到ftp这个对象的时候,就可以根据数组的索引来给ftp对象中对应的配置参数赋值了。

      public static string[] GetConDb(string MainConn)
            {
                string Username = "";
                string UserPassword = "";
                string Ip = "";
                string Port = "";
                string constr = "Data Source=.;Initial Catalog=ICBC;Integrated Security=SSPI;";
                string sqlstr = @"select * from ICBC.dbo.[FTPConfigurations] where FTPMainConn='" + MainConn+ "'";
                SqlConnection conn = new SqlConnection(constr);
                SqlCommand cmd = new SqlCommand(sqlstr, conn);
                conn.Open();
                try
                {
                    DataTable dt = new DataTable();
                    SqlDataAdapter sda = new SqlDataAdapter(cmd);
                    sda.Fill(dt);
                    string ccc = dt.Rows[1]["FTPConnPath"].ToString();
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        string Sername = dt.Rows[i]["FTPConnPath"].ToString();
                        if (Sername.Contains("ServerUserName"))
                        {
                            Username = dt.Rows[i]["ConfiguredValue"].ToString();
                        }
                        if (Sername.Contains("ServerPassword"))
                        {
                            UserPassword = dt.Rows[i]["FTPConnPwd"].ToString();
                        }
                        if (Sername.Contains("[FTPConnectionString]"))
                        {
                            string ServerPort = dt.Rows[i]["FTPConnValue"].ToString();
                            Ip = ServerPort.Substring(0, ServerPort.Length - 3);
                            Port = ServerPort.Substring(ServerPort.Length - 2, 2);
                        }
    
                    }
    
    
                    string all = Username + ";" + UserPassword + ";" + Ip + ";" + Port;
                    string[] strDb = all.Split(';');
                    return strDb;
                }
    
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
    
                finally
                {
                    conn.Close();
                }
    
            }

     权当做学习笔记

    -----市人皆大笑,举手揶揄之

  • 相关阅读:
    个人记录--当前年月,求当月天数和上月
    java修改图片大小
    多层iframe的页面取子标签
    oracle的游标
    json中获取key值
    iOS开发常用代码块(2)
    大话数据结构(六)——链式存储
    项目中比较有用得到js经验
    微信公众号开发——php sdk php中curl用法
    微信页面设计weui源代码(4)——Pciker微信页面中实现下拉菜单
  • 原文地址:https://www.cnblogs.com/Sientuo/p/5969347.html
Copyright © 2011-2022 走看看