在.Net中跨Internet的文件加密传输实现每天数据库的备份
来源:互联网 发布:北京大学网络教育招生 编辑:程序博客网 时间:2024/05/19 16:21
接到一个任务,有2台机器,其中有一台机器A有每天数据库的备份,我想另外的一台机器B定时从A中copy到B的制定目录,A不共享数据库备份的目录。考虑到FTP方式无法跨越NAT(网络地址转换),而HTTP方式在安全性和可靠性方面都得不到保证,在文件较大时也会有一定的限制。决定采用一种基于HTTP协议,编写客户端和服务器端程序,在一个客户端用HttpWebRequest对象向指定的URL发送POST和GET请求,在服务器端通过程序接受请求,进行文件传输,这样,发送和接收都由自己编写的程序进行控制,可以方便地实现诸如身份验证、数据加密和断点续传等功能,同时可以穿越防火墙和NAT。这样做就可以实现在.Net中跨Internet的文件加密传输。
CryptoStream encStream=new CryptoStream(reqStream,des.CreateEncrytor(desKey,desIV),CryptoStreamMode.Write);
//定义内存缓冲区用于文件的读写
iReadLength=fileStream.Read(buffer,0,buffer.Length);
while(iReadLength!=0) {
//将读出的文件内容写入加密流
encStream.Write(buffer,0,iReadLength);
iReadLength=fileStream.Read(buffer,0,buffer.Length);
}
//关闭请求的流
encStream.Close();
reqStream.Close();
fileStream.Close();
//向服务器提出请求并获得结果3
HttpWebResponse sp=(HttpWebResponse)objRequest.GetResponse();
string strContent="";
int iLen=(int)sp.ContentLength;
if(iLen>0) {
//将结果流写入到二进制流bContent中
Stream resStream=sp.GetResponseStream();
byte[] bContent=new byte[sp.ContentLength];
resStream.Read(bContent,0,iLen);
sp.Close();
//由于结果是一个二进制数据,必须将结果解码成字符串
char[] charContent=new char[sp.ContentLength];
Text.Decoder dc=Text.Encoding.UTF8.GetDecoder();
int charLen=dc.GetChars(bContent,0,bContent.Length,charContent,0);
foreach(char c in charContent) strContent+=c.ToString();
}
2.服务器端代码
//判断请求的ContentType,过滤非法请求
if(Request.ContentType!="application/octet-stream") return;
//获得上传得文件名和长度
string strFileName=Request.QueryString["FileName"];
int iFileLength=Request.TotalBytes;
//构造服务器端文件名
string strFilePath=Server.MapPath(".")+IO.Path.DirectorySeparatorChar+"Upload"+IO.Path.DirectorySeparatorChar+strFileName;
//判断文件是否存在
if(File.Exists(strFilePath)) {
//如果文件存在,返回文件名和文件长度
FileInfo fi=new FileInfo(strFilePath);
long lFileLength=fi.Length;
Response.Write("File["+strFileName+"]Exists!Length="+lFileLength.ToString());
Response.End();
}
//如果文件不存在,打开文件流创建该文件
FileStream fileStream=File.Create(strFilePath,iFileLength);
//用DES算法解密该文件流
2.服务器端代码
//获得上传的文件名和偏移量
string strFileName=Request.QueryString["FileName"];
long lOffset=Convert.ToInt64(Request.QueryString["Offset"]);
//构造文件全路径名
string strFilePath=Server.MapPath(".")+IO.Path.DirectorySeparatorChar+"Download"+IO.Path.DirectorySeparatorChar+strFileName;
//若文件不存在,则返回错误信息
if(!File.Exists(strFilePath)) {
Response.Clear();
Response.Write("File["+strFileName+"]Not Exists!");
Response.End();
}
//打开文件
IO.FileStream fileStream=new IO.FileStream(strFilePath,IO.FileMode.Open,IO.FileAccess.Read,IO.FileShare.Read);
//根据上传的偏移量参数设置偏移量
if(lOffset>0)
fileStream.Seek(lOffset,IO.SeekOrigin.Begin);
//定义输出流
Stream resStream=Response.OutputStream;
//用DES算法加密此数据流
- 在.Net中跨Internet的文件加密传输实现每天数据库的备份
- 在.net 中实现Mysql的备份
- 在远程桌面中,实现文件传送/传输/拷贝的方法.
- Oracle 11g数据库每天自动备份的实现方法
- 数据库复制技术在Internet上的实现
- 大文件加密(实现在文件流中进行加密解密的方法)
- 如何在linux下实现mysql数据库每天自动备份
- 如何在linux下实现mysql数据库每天自动备份
- 如何在linux下实现mysql数据库每天自动备份
- 在CentOS实现mysql数据库的自动备份备份
- 如何用SQLDMO在ASP.NET页面下实现数据库的备份与恢复
- 如何用SQLDMO在ASP.NET页面下实现数据库的备份与恢复
- 如何用SQLDMO在ASP.NET页面下实现数据库的备份与恢复
- 如何用SQLDMO在ASP.NET页面下实现数据库的备份与恢复
- 用SQLDMO在ASP.NET页面下实现数据库的备份与恢复
- 如何用SQLDMO在ASP.NET页面下实现数据库的备份与恢复
- 如何用SQLDMO在ASP.NET页面下实现数据库的备份与恢复
- 如何用SQLDMO在ASP.NET页面下实现数据库的备份与恢复
- 如何正确的作远程测试? - JMeterFAQ
- jmeter脚本录制方法:
- Apache JMeter
- Jmeter使用之脚本录制回放
- [基本设计(需求分析)]-1
- 在.Net中跨Internet的文件加密传输实现每天数据库的备份
- 终于有自己的空间了
- 怎样实现数据库的备份与恢复
- MFC下如何定制消息
- Windows核心编程读书笔记6-多线程编程
- Install oracle 10g express version in debian amd64
- Hibernate Query Language(HQL)
- 生活现实点
- C#递归文件夹获得总大小