不安全,给你两个加密解密函数
/// <summary>
/// DES加密,密钥为8位字符
/// </summary>
/// <param name="strEncrypt">需要加密的字符串</param>
/// <param name="strKey">8位的密钥</param>
/// <returns></returns>
public static string DesEncrypt(string strEncrypt, string strKey)
{
if (stringIsNullOrEmpty(strEncrypt)) return null;
try
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] inputByteArray = EncodingDefaultGetBytes(strEncrypt);
desKey = ASCIIEncodingASCIIGetBytes(strKey);
desIV = ASCIIEncodingASCIIGetBytes(strKey);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, desCreateEncryptor(), CryptoStreamModeWrite);
csWrite(inputByteArray, 0, inputByteArrayLength);
csFlushFinalBlock();
StringBuilder ret = new StringBuilder();
foreach (byte b in msToArray())
{
retAppendFormat("{0:X2}", b);
}
retToString();
return retToString();
}
catch
{
return null;
}
}
/// <summary>
/// DES解密,密钥为8为字符
/// </summary>
/// <param name="strDecrypt">需要加密的字符串</param>
/// <param name="strKey">8位的密钥</param>
/// <returns></returns>
public static string DesDecrypt(string strDecrypt, string strKey)
{
if (stringIsNullOrEmpty(strDecrypt)) return null;
try
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] inputByteArray = new byte[strDecryptLength / 2];
for (int x = 0; x < strDecryptLength / 2; x++)
{
int i = (ConvertToInt32(strDecryptSubstring(x 2, 2), 16));
inputByteArray[x] = (byte)i;
}
desKey = ASCIIEncodingASCIIGetBytes(strKey);
desIV = ASCIIEncodingASCIIGetBytes(strKey);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, desCreateDecryptor(), CryptoStreamModeWrite);
csWrite(inputByteArray, 0, inputByteArrayLength);
csFlushFinalBlock();
return SystemTextEncodingDefaultGetString(msToArray());
}
catch
{
return null;
}
}
}
使用方法,先把连接字符串加密
string strConnEnc = DesEncrypt(strConn,'abcd1234');
然后 strConnEnc 就是加密过的了,可以写在配置文件webconfig里头或别的地方
使用的时候
DesDecrypt(strConnEnc,'abcd1234')
调出来结果就是连接字符串了,可以用来连接数据库了
为什么不好?config里的connectionStrings本来用义就是放连接字符串的,当然最好加密,防止配置文件被打开导致泄密
如果不放配置文件里,写在代码里,那数据库一改,程序就得改,程序员累死算了
按照你的这个想法,基本无解。
因为在有源代码的情况下,任何加密或其它防护措施都变得透明。
幸亏微软想到了这个问题
配置文件加密:
>
这是一个把数据库里的数据生成XML格式,你稍微改一下就可以用在文本文件了。
<%@ Import Namespace= "SystemData " %>
<%@ Import Namespace= "SystemDataSqlClient " %>
<html>
<head>
<script language= "C# " runat= "server ">
public DataView Source;
public DataSet ds;
public bool getSchema, getData;
public void Submit_Click(Object sender, EventArgs evt) {
if (IsPostBack) {
SqlConnection myConnection = new SqlConnection(ConnectStringValue);
SqlDataAdapter myCommand = new SqlDataAdapter(myTextValue, myConnection);
ds = new DataSet();
myCommandFill(ds, "表 ");
Source = new DataView(dsTables[0]);
getSchema = GetSchemaChecked;
getData = GetDataChecked;
MyDataGridDataSource=Source;
MyDataGridDataBind();
}
}
</script>
</head>
<body bgcolor= "ffffcc ">
<h3> <font face= "宋体 "> SQL 到 XML 生成器 </font> </h3>
<form runat= "server ">
<table border=0 cellpadding=5 style= "font:105pt 宋体 ">
<tr>
<td colspan= "2 ">
<b> 连接字符串: </b> <br>
<input id= "ConnectString " type= "text " value= "server=(local);database=pubs;uid=sa;pwd=1234 " size= "85 " runat= "server ">
</td>
</tr>
<tr>
<td colspan= "2 ">
<b> 查询: </b> <br>
<input id= "myText " type= "text " value= "SELECT FROM Authors " size= "85 " runat= "server ">
</td>
</tr>
<tr>
<td>
<input type= "radio " id= "GetSchema " name= "Mode " runat= "server "/> 获取 XML 架构 <br>
<input type= "radio " id= "GetData " name= "Mode " runat= "server "/> 获取 XML 数据 <br>
<input type= "radio " id= "GetBoth " name= "Mode " checked runat= "server "/> 两者都获取
</td>
<td valign= "top ">
<input type= "submit " runat= "server " OnServerClick= "Submit_Click ">
</td>
</tr>
<tr>
<td colspan= "2 ">
<% if (PageIsPostBack) { %>
<b> 结果: </b> <br>
<textarea cols=80 rows=25>
<%
if (getSchema)
dsWriteXmlSchema(ResponseOutput);
else if (getData)
dsWriteXml(ResponseOutput, XmlWriteModeIgnoreSchema);
else
dsWriteXml(ResponseOutput, XmlWriteModeWriteSchema);
%>
</textarea>
<% } %>
</td>
</tr>
<tr>
<td colspan= "2 ">
<% if (PageIsPostBack) { %>
<b> 数据: </b> <br>
<% } %>
<ASP:DataGrid id= "MyDataGrid "
BackColor= "#EDBE7B "
BorderColor= "black "
ShowFooter= "false "
CellPadding=3
CellSpacing= "0 "
Font-Name= "宋体 "
Font-Size= "8pt "
HeaderStyle-BackColor= "#DC6035 "
EnableViewState= "false "
runat= "server "
/>
</td>
<tr>
</table>
</form>
</body>
</html>
mysql数据库中提供了很丰富的函数。mysql函数包括数学函数、字符串函数、日期和时间函数、条件判断函数、系统信息函数、加密函数、格式化函数等。通过这些函数,可以简化用户的 *** 作。
简单介绍几类函数的使用范围:
数学函数:这类函数只要用于处理数字。这类函数包括绝对值函数、正弦函数、余弦函数、获取随机数函数等。
字符串函数:这类函数主要用于处理字符串。其中包括字符串连接函数、字符串比较函数、将字符串的字母变成小写或大写字母的函数、获取子串的函数等。
日期和时间函数:这类函数主要用于处理日期和时间。其中包括取当前时间的函数、获取当前日期的函数、返回年份的函数、返回日期的函数等。
流程函数:这类函数主要用于在SQL语句中控制条件选择。其中包括IF语句、CASE语句、WHEN语句等。
系统信息函数:这类函数主要用于获取mysql数据库的系统信息。其中包括获取数据库名的函数、获取当前用户的函数、获取数据库版本的函数等。
加密函数:这类函数主要用于对字符串进行加密解密。其中包括字符串加密函数、字符串解密函数等。
其他函数:包括格式化函数、锁函数等。
以上就是关于C# winform程序连接数据库直连安全吗全部的内容,包括:C# winform程序连接数据库直连安全吗、c# winfrom程序连接数据库字符串写在配置文件里好吗、用C#的winform程序写了个DES解密函数。密钥写在里面的。但反编译能看到密钥。除加壳外,怎防密钥泄漏等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)