欢迎来到Introzo百科
Introzo百科
当前位置:网站首页 > 技术 > vs2010项目密码_VS2010对比MD5加密的密码

vs2010项目密码_VS2010对比MD5加密的密码

日期:2023-09-19 08:03

原文地址为:

在VS2010项目中引用Lib静态库(以Openssl为例)

????? Openssl是个为网络通信提供安全及数据完整性的一种安全协议,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。首先下载Openssl包:(http://www.introzo.com/),这是一个C语言类库包,在Windows下可以通过Perl对该类库包进行MakeBuild,产生libeay32、ssleay32的Lib以及Dll文件,具体操作详见:http://www.introzo.com/blog/more.asp?name=OpenSSL&id=18972,通过编译产生这样一系列文件:

inc32里面放置C语言头文件。

?

1. 现在我要在VS2010的工程项目中使用到它,首先我要创建一个VC++.NET的项目,我这里创建了一个MFC应用程序:

在项目名称中点击“右键”,选择“属性”,从里面找到“VC++目录”:

找到两个目录选项:

其中包含目录指向你的Openssl的头文件的目录,库目录指向你的Lib、Dll所在的目录。

从这里新建目录来指向引导的目录:

然后切换到“链接器”-> “输入”:

在“附加依赖项”中,加入两个Lib文件:

这样就完成了静态库的引用。

?

2. 现在看下项目中怎么引用它(以SHA256算法为例):

#include

?

方法展示:

// SHA256算法字符串加密void sha256(char* string, char outputBuffer[64]){ unsigned char hash[SHA256_DIGEST_LENGTH]; SHA256_CTX sha256; SHA256_Init(&sha256); SHA256_Update(&sha256, string, strlen(string)); SHA256_Final(hash, &sha256); int i = 0; for(i = 0; i < SHA256_DIGEST_LENGTH; i++) { sprintf(outputBuffer + (i * 2), "%02x", hash[i]); }}

?

调用:

static unsigned char buffer[64];sha256(signature, (char*)buffer);

?

由于Openssl包需要利用Perl进行编译形成Lib以及Dll文件,这里我附上已经制作好的文件,方便大家使用!

?

Openssl最新版openssl-1.0.0d的Windows执行包下载:openssl_out32dll.rar

转载请注明本文地址:

在VS2010项目中引用Lib静态库(以Openssl为例)

原文地址为:

[EntLib]微软企业库5.0 学习之路——第二步、使用VS2010+Data Access模块建立多数据库项目

???? 在通过上一篇文章:[EntLib]微软企业库5.0 学习之路——第一步、基本入门 对EntLib5.0的相关知识进行了了解,并通过微软给出的学习例子我们可以了解企业库的各模块的基本用法(由于园子里的好几位兄弟都已经把企业库的各模块的使用都介绍过了,所以我这边就不进行具体功能的介绍,我写的学习之路是以企业库如何在一个项目中的使用为基础来介绍,以一个简单的学生信息管理系统项目为基础,如何使用企业库来对这个项目进行开发、优化)。

(本文内容比较简单,高手们可以直接忽略不看了,仅仅就是数据库访问操作和工厂分层)

???? 现在我就开始进入学习之路的第二步——Data Access模块,这个模块是企业库中被使用频率最高的模块,它很好的封装了数据库操作应用,为我们进行多数据库系统开发提供了便利,只需更改配置文件就可以很快的切换数据库访问(可惜还是要重写SQL语句,没法和ORM比)。

下面是我在配置企业库的时候碰到问题,如果没有碰到可以略去不看(可能有点小白)

注意:此处切换数据库配置必须是计算机中已经安装好相应的数据库访问模块,如需要进行从MS SQL向SQLite数据库的变更时,计算机中必须安装好SQLite数据库访问模块(在这里我就碰到了这个问题,原来我机器上在VS2008开发时已经安装过SQLite数据库访问模块,但是新装了VS2010,在VS2010引用对话框中也能访问到在VS2008安装的SQLite(但是在企业库5.0配置器中无法查看到SQLite),但是发现更改企业库的配置文件后无法访问SQLite数据库,尝试了很多方法都没用,结果死马当活马医又重新装了一遍SQLite数据库访问模块再重新打开企业库配置器就可以看到SQLite数据库了(所以请确保在企业库编辑器中可以查看到要切换的数据库,否则可能导致无法访问数据库)。看下图:

?

回归正题,这次的学习由于VS2010发布了,而且企业库5.0也都支持.NET4.0,所以决定企业库的学习之路采用VS2010进行学习(顺便熟悉下.NET4的特性,毕竟公司的项目不可能立马转移到.NET4.0的,现在就当练手吧)

好了,现在就开始进行第2步的学习了,首先看下项目的结构:

项目采用仿MS PetShop架构,如不了解此架构可以到此查看了解:PetShop的系统架构设计

其中DAL和DALSQLite层对应MS SQL和SQLite数据库,Helper为整个项目的帮助器

现在来具体了解下DAL层

在DAL层中引用了Helper,IDAL,EnterpriseLibrary.Common和www.introzo.com这4个项目,其中Helper项目中有个DBHelper.cs,用于获取当前的数据对象,其代码如下(采用了C#4.0的语法特性,默认参数,数据库对象名默认为空,这样则会调用企业库默认的数据库对象,同时也可以在调用的时候赋值,这样则根据传递过来的数据库对象名来创建数据库,通过这个参数我们将原来需要重载的2个方法才能实现合并成了一个方法):

using Microsoft.Practices.EnterpriseLibrary.Common.Configuration;

using www.introzo.com;

namespace EntLibStudy.Helper

{

public static class DBHelper

{

///

/// 获取数据库对象

///

/// 数据库实例名(默认name为空,调用默认数据库实例)

/// 数据库对象

public static Database CreateDataBase(string name = "")

{

//return DatabaseFactory.CreateDatabase(name);

return EnterpriseLibraryContainer.Current.GetInstance(name);

}

}

}

在DAL层中则引用Helper来获取数据库对象,进行数据库操作,我们现在来看下具体的数据库访问类编写代码,学员操作类:

using System;

using System.Collections.Generic;

using www.introzo.com;

using System.Data.Common;

using System.Linq;

using System.Text;

using www.introzo.com;

using EntLibStudy.Model;

using EntLibStudy.Helper;

namespace EntLibStudy.DAL

{

public class StudentService : EntLibStudy.IDAL.IStudentService

{

///

/// 新增学生

///

/// 学生对象

///

public int Add(Student student)

{

Database db = DBHelper.CreateDataBase();

StringBuilder sb = new StringBuilder();

sb.Append("insert into Student values(@ClassId,@SID,@Password,@Name,@Sex,@Birthday,@IsAdmin);SELECT @@IDENTITY;");

DbCommand cmd = db.GetSqlStringCommand(sb.ToString());

db.AddInParameter(cmd, "@ClassId", DbType.String, student.ClassId);

db.AddInParameter(cmd, "@SID", DbType.String, student.Sid);

db.AddInParameter(cmd, "@Password", DbType.String, student.Password);

db.AddInParameter(cmd, "@Name", DbType.String, www.introzo.com);

db.AddInParameter(cmd, "@Sex", www.introzo.com32, www.introzo.com);

db.AddInParameter(cmd, "@Birthday", DbType.DateTime, student.Birthday);

db.AddInParameter(cmd, "@IsAdmin", www.introzo.com32, student.IsAdmin);

int id = Convert.ToInt32(db.ExecuteScalar(cmd));

return id;

}

///

/// 更新

///

/// 学生对象

/// 是否成功

public bool Update(Student student)

{

Database db = DBHelper.CreateDataBase();

StringBuilder sb = new StringBuilder();

sb.Append("update Student set ClassId=@ClassId,");

sb.Append("SID=@SID,");

sb.Append("Password=@Password,");

sb.Append("Name=@Name,");

sb.Append("Sex=@Sex,");

sb.Append("Birthday=@Birthday,");

sb.Append("IsAdmin=@IsAdmin ");

sb.Append(" where ID=@ID");

DbCommand cmd = db.GetSqlStringCommand(sb.ToString());

db.AddInParameter(cmd, "@ClassId", DbType.String, student.ClassId);

db.AddInParameter(cmd, "@SID", DbType.String, student.Sid);

db.AddInParameter(cmd, "@Password", DbType.String, student.Password);

db.AddInParameter(cmd, "@Name", DbType.String, www.introzo.com);

db.AddInParameter(cmd, "@Sex", www.introzo.com32, www.introzo.com);

db.AddInParameter(cmd, "@Birthday", DbType.DateTime, student.Birthday);

db.AddInParameter(cmd, "@IsAdmin", www.introzo.com32, student.IsAdmin);

db.AddInParameter(cmd, "@ID", www.introzo.com32, www.introzo.com);

return db.ExecuteNonQuery(cmd) > 0 ? true : false;

}

///

/// 删除

///

/// 学生ID

/// 是否成功

public bool Delete(int id)

{

Database db = DBHelper.CreateDataBase();

StringBuilder sb = new StringBuilder();

sb.Append("delete from Student ");

sb.Append(" where ID=@ID");

DbCommand cmd = db.GetSqlStringCommand(sb.ToString());

db.AddInParameter(cmd, "@ID", www.introzo.com32, id);

return db.ExecuteNonQuery(cmd) > 0 ? true : false;

}

///

/// 根据学生ID查询学生对象

///

/// 学生ID

///

public Student SelectById(int id)

{

Student student = null;

Database db = DBHelper.CreateDataBase();

StringBuilder sb = new StringBuilder();

sb.Append("select * from Student ");

sb.Append(" where ID=@ID");

DbCommand cmd = db.GetSqlStringCommand(sb.ToString());

db.AddInParameter(cmd, "@ID", www.introzo.com32, id);

using (IDataReader reader = db.ExecuteReader(cmd))

{

if (www.introzo.com())

{

student = new Student()

{

Id = reader.GetInt32(0),

ClassId = reader.GetInt32(1),

Sid = reader.GetString(2),

Password = reader.GetString(3),

Name = reader.GetString(4),

Sex = reader.GetInt32(5),

Birthday = reader.GetDateTime(6),

IsAdmin = reader.GetInt32(7)

};

}

}

return student;

}

///

/// 查询所有学生信息

///

///

public IList SelectAll()

{

List list = new List();

Database db = DBHelper.CreateDataBase();

StringBuilder sb = new StringBuilder();

sb.Append("select * from Student ");

DbCommand cmd = db.GetSqlStringCommand(sb.ToString());

using (IDataReader reader = db.ExecuteReader(cmd))

{

while (www.introzo.com())

{

list.Add(new Student()

{

Id = reader.GetInt32(0),

ClassId = reader.GetInt32(1),

Sid = reader.GetString(2),

Password = reader.GetString(3),

Name = reader.GetString(4),

Sex = reader.GetInt32(5),

Birthday = reader.GetDateTime(6),

IsAdmin = reader.GetInt32(7)

});

}

}

return list;

}

///

/// 查询所有学生信息

///

///

public IList SelectAllMapper()

{

var list = new List();

Database db = DBHelper.CreateDataBase();

DataAccessor studentAccessor;

//studentAccessor = db.CreateSqlStringAccessor("select * from Student",

// MapBuilder.MapAllProperties().

// Build()

// );

studentAccessor = db.CreateSqlStringAccessor("select * from Student",

MapBuilder.MapAllProperties().

Map(p => www.introzo.com).ToColumn("ID").

Map(p => p.Sid).ToColumn("SID").

Map(p => p.Password).WithFunc(f => "******").//将密码转换为"*",无法直接查看

Map(p => www.introzo.com).WithFunc(ToUpperName).//将学员名称转换为大写

Map(p => www.introzo.com).ToColumn("Sex").

Map(p => p.Birthday).ToColumn("Birthday").

Build()

);

list = studentAccessor.Execute().ToList();

return list;

}

///

/// 将学员名称转换为大写

///

///

///

private string ToUpperName(IDataRecord dataRecord)

{

var name = (string)dataRecord["Name"];

return name.ToUpper();

}

public Student SelectBySid(string sid)

{

Student student = null;

Database db = DBHelper.CreateDataBase();

StringBuilder sb = new StringBuilder();

sb.Append("select * from Student ");

sb.Append(" where SID=@SID");

DbCommand cmd = db.GetSqlStringCommand(sb.ToString());

db.AddInParameter(cmd, "@SID", DbType.String, sid);

using (IDataReader reader = db.ExecuteReader(cmd))

{

if (www.introzo.com())

{

student = new Student()

{

Id = reader.GetInt32(0),

ClassId = reader.GetInt32(1),

Sid = reader.GetString(2),

Password = reader.GetString(3),

Name = reader.GetString(4),

Sex = reader.GetInt32(5),

Birthday = reader.GetDateTime(6),

IsAdmin = reader.GetInt32(7)

};

}

}

return student;

}

}

}

其中的代码都是采用了比较常见的老套路:

1、获取数据库对象

2、构建Command对象并进行执行语句及参数赋值

3、通过数据库对象调用相应方法执行Command

企业库在Data Access上帮我们做了比较好的封装,相当于为我们提供了如SQLHelper,OracleHelper类,只不过这个帮助类转换了一个个数据库的对象,通过数据库对象来对数据库数据进行操作

(个人认为通过这种方式进行操作更加直观,而且企业库的对SQL语句的参数操作方法也很直观:AddInParameter,AddOutParameter,GetParameterValue很好的区分了参数的操作,比原来的SQLCommand好多了)

如果仔细看了上面操作代码的朋友肯定发现了类中有个叫SelectAllMapper的方法,这个方法采用的是企业库5.0中新提供的Accessor进行RowMapper来直接为实体赋值,相比原来的使用reader方式取值赋值更加优雅,只要SQL查询出来的对象字段和实体对象属性一样就可以使用MapAllProperties()方法直接赋值,如果不同的话可以使用map方法来对个别属性单独映射,而且在映射的时候还可以使用WithFunc来进行进一步操作,在代码中我将密码进行了替换,以“*”的形式展示,同时把学员的名称以大写的形式展示。

(注:更多的企业库Data Access模块方法使用可以点击这里下载微软给出的学习例子和http://www.introzo.com/发布的学习手册)

在完成底层的操作,现在我们就开始对企业库的数据库访问进行配置:

在Web层的Web.config上右键打开企业库配置器:Blocks-Add Data Settings-Add DataBase Connstring,新建2个数据库对象,一个是MS SqlServer数据库,一个是SQLite数据库.

?

新建一个数据库设置

新建二个数据库连接

一个为EntLibStudy,另一个为EntLibSQLite

我们来看下具体的配置文件代码:

providerName="System.Data.SqlClient" />

providerName="System.Data.SQLite" />

至此我们就完成了Data Access模块的代码编写和基本设置(具体代码请到文章底部下载源代码,类似代码则不再描述)。

这时如果项目需求发生了变更,由于成本太高不能使用MS SQL SERVER,而要改用SQLite数据库时则只需更改配置文件,将dataConfiguration配置节中defaultDatabase更改为EntLibStudySQLite,将appSettings配置节中DAL的值改为EntLibStudy.DALSQLite即可立刻切换到SQLite数据库。

下面我来看下运行出来的效果:

?

红色框中地址采用了www.introzo.com4中的路由功能,实现了地址重写

红框中如上面的分析,在DAL层进行属性映射的时候已经将密码以*代替,学员姓名以大写形式展现(此页面仅用来展示属性映射,无其他用处,页面地址为:~/Student/StudentList.aspx)

至此,学习之路的第二步——Data Access模块的学习就到此为止了,其他一些东西请下载源代码查看。

注意:

1、MSSQL数据库在DataBase目录下(需要自行附加数据库),SQLite数据库在Web目录的App_Data下,由于考虑到项目的大小,所以每个项目的BIN目录都已经删除,如出现无法生成项目请自行添加相关企业库的DLL。

2、由于微软企业库5.0 学习之路这个系列我是准备以一个小型项目的形式介绍企业库的各模块,所以源代码会根据系列文章的更新而更新,所以源代码不能保证与文章中所贴代码相同。

3、项目开发环境为:VS2010+SQL2005。

4、管理员帐户:admin

????????????? 密码:admin

项目下载地址:点我下载

?

微软企业库5.0 学习之路系列文章索引:

第一步、基本入门

第二步、使用VS2010+Data Access模块建立多数据库项目

第三步、为项目加上异常处理(采用自定义扩展方式记录到数据库中)?

第四步、使用缓存提高网站的性能(EntLib Caching)

第五步、介绍EntLib.Validation模块信息、验证器的实现层级及内置的各种验证器的使用方法——上篇

第五步、介绍EntLib.Validation模块信息、验证器的实现层级及内置的各种验证器的使用方法——中篇?

第五步、介绍EntLib.Validation模块信息、验证器的实现层级及内置的各种验证器的使用方法——下篇

第六步、使用Validation模块进行服务器端数据验证

第七步、Cryptographer加密模块简单分析、自定义加密接口及使用—上篇

第七步、Cryptographer加密模块简单分析、自定义加密接口及使用—下篇

第八步、使用Configuration Setting模块等多种方式分类管理企业库配置信息

第九步、使用PolicyInjection模块进行AOP—PART1——基本使用介绍

第九步、使用PolicyInjection模块进行AOP—PART2——自定义Matching Rule

第九步、使用PolicyInjection模块进行AOP—PART3——内置Call Handler介绍

第九步、使用PolicyInjection模块进行AOP—PART4——建立自定义Call Handler实现用户操作日志记录

第十步、使用Unity解耦你的系统—PART1——为什么要使用Unity?

第十步、使用Unity解耦你的系统—PART2——了解Unity的使用方法(1)

第十步、使用Unity解耦你的系统—PART2——了解Unity的使用方法(2)

第十步、使用Unity解耦你的系统—PART2——了解Unity的使用方法(3)

第十步、使用Unity解耦你的系统—PART3——依赖注入

第十步、使用Unity解耦你的系统—PART4——Unity&PIAB

扩展学习:

扩展学习篇、库中的依赖关系注入(重构 Microsoft Enterprise Library)[转]

?

转载请注明本文地址:

[EntLib]微软企业库5.0 学习之路——第二步、使用VS2010+Data Access模块建立多数据库项目

新手菜鸟,把用vs2010开发时,如何在登录窗口判断数据库中MD5加密的密码。

今天写个简单的程序,创建用户名和密码,写入到Excel中,Excel中的密码是MD5加密的效果。

添加引用

//自定义引用

using System.Data.OleDb;

using System.Security.Cryptography;

打开Excel

简单的理解,就是把Excel当成是sql来进行操作。

string Conn_Str = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=D:/个人/VS2010/用户登录/userinfo.xls;" + "Extended Properties=Excel 8.0;";

OleDbConnection conn = new OleDbConnection(Conn_Str);

备注:Provider=Microsoft.Jet.OLEDB.4.0只支持Office97-2003,不支持2007。

如果需要支持2007,使用 Provider=’Microsoft.Ace.OLEDB.12.0

MD5加密的密码保存到Excel中

简单的理解就是把用户输入的密码通过MD5加密的方式,把加密后的数据存入Excel里边。

我的excel是这样设置的

username:用户名

passowrd:MD5加密密码

把用户输入的密码转成MD5加密格式,保存到变量。

部分核心代码如下:

string md5mm = "";

MD5 md5 = MD5.Create();

byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(textBox_PassWord.Text.Trim()));

for (int i = 0; i < s.Length; i++)

{

md5mm = md5mm + s[i].ToString("X");

}

打开数据库,执行写入命令。成功后返回提示。 部分核心代码如下:

?

string Conn_Str = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=D:/个人/VS2010/用户登录/userinfo.xls;" + "Extended Properties=Excel 8.0;";

OleDbConnection conn = new OleDbConnection(Conn_Str);

string SQLSTR = "INSERT INTO [Sheet1$] VALUES ('"+textBox_UserName.Text.Trim()+"','"+md5mm+"')";

OleDbCommand cmd = new OleDbCommand(SQLSTR, conn);

www.introzo.com();

cmd.ExecuteNonQuery();

www.introzo.com("用户"+textBox_UserName.Text.Trim()+"添加成功!");

conn.Close();

说明:因为Excel的工作簿,默认的第一个是Sheet1,所以在insert into 后边写[Sheet1$];

这语句简单的很,就不重复解释了。

效果

根据上边的所有代码,可以总结成这样的一条命令:

首先,把用户输入的普通的密码字符转换成MD5加密格式,存到变量MD5MM;

其次,把用户名和加密后的密码写入到EXCEL中。

最后,弹出提示框,提示添加成功。

添加成功的图

excel中的数据效果

最后的结束语 希望对你有所帮助吧~

0条大神的评论

发表评论

关灯