我正在尝试使用FtpWebRequest该方法从FTP下载文件的简单方法WebRequestMethods.Ftp.DownloadFile.问题是我不想显示下载的进度,因此需要知道前面的文件大小才能计算转移的百分比.但是,当我打电话GetResponse中FtpWebRequest的ContentLength成员为-1.
好的 - 所以我使用该方法预先获得文件的大小WebRequestMethods.Ftp.GetFileSize.没问题.在获得大小后我下载文件.
这就是问题出现的地方......
获得大小后我尝试重用FtpWebRequest并重置方法WebRequestMethods.Ftp.DownloadFile.这会导致System.InvalidOperationException类似"发送请求后无法执行此操作"之类的说法.(可能不是确切的表述 - 翻译自瑞典语).
我在其他地方发现,只要我将KeepAlive属性设置为true,无关紧要,连接保持活动状态.这是我不明白的......我创造的唯一对象是我的FtpWebRequest对象.如果我创建另一个,它怎么知道使用什么连接?什么凭据?
伪代码:
Create FtpWebRequest
Set Method property to GetFileSize
Set KeepAlive property to true
Set Credentials property to new NetworkCredential(...)
Get FtpWebResponse from the request
Read and store ContentLength
Run Code Online (Sandbox Code Playgroud)
现在我得到了文件大小.所以是时候下载文件了.设置方法知道导致上述异常.所以我创建一个新的FtpWebRequest?或者无论如何重置请求重用?(结束回复没有任何区别.)
我不明白如何在不重新创建对象的情况下前进.我能做到这一点,但感觉不对劲.所以我在这里发帖,希望能找到正确的方法.
这是(非工作)代码(输入是sURI,sDiskName,sUser和sPwd.):
FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(sURI);
request.Method = WebRequestMethods.Ftp.GetFileSize;
request.Credentials = new NetworkCredential(sUser, sPwd);
request.UseBinary = true;
request.UsePassive …Run Code Online (Sandbox Code Playgroud) 编辑
我碰到了这个,因为我还没有得到一个确定的答案(尽管一两个是关闭的).我正在寻找的基本上是一个是或否的答案,有一些信息支持它.
我们有一个系统存储由数据库中的通用系统密钥加密的用户密码.如果有DB访问权限的人掌握了该系统密钥,那么这可能是灾难性的(显然).
我们现在知道的正确方法(根据大多数(?))是在数据库中存储PW的盐渍哈希值,但是相对接近于版本我们希望最小化代码更改,因此认为非常简单防止有人从数据库中读出PW的方法是简单地反转过程并切换参数.
也就是说,我们将使用用户密码作为密钥加密每个系统(数百个)唯一盐渍字符串(每个加密添加随机尾部),将结果存储在数据库中.在PW验证中,我们将使用输入的PW对存储在DB中的字符串进行解密,并与系统密钥匹配以进行验证.
System key+randompassword在DB中使用存储进行加密encrypted key.
即用户密码永远不会被存储,并且在我们简单的思想中是不可挽回的.
但作为加密领域的新手,我们想知道在该领域有更多经验的人是否可以回答这个简单的问题 -
是否有可能从原始字符串和加密字符串中找出密钥?
我们认为这是一种很棒的方法,可以确保用户密码遭到入侵,但无法在线查找任何方法.这使我们对它不确定,因此要求这个伟大的社区.
( 蛮力不是一个充分的答案,因为(在这种情况下)是不可能保护的.)
编辑:
我会在这里粘贴我的一条评论(希望)让事情变得更清楚:
@zaph感谢您的意见,但我认为大多数人都忽略了这一点.我们将在几天内对即将发布的版本进行代码冻结,并且我已经实现了我在问题中提到的方法.在下一个版本发布之前,我将阅读有关该主题并实现第三方库,如scrypt或类似的.我真的只需要知道是否存在可行的反向过程算法,从而使我的新实现比旧的加密密码方法更糟糕.
我使用此代码绘制了多行,但我觉得有更好的方法可以做到这一点.
例如,通过使用多维数组?还是清单?
private void drawLines()
{
int[] x1 = { 0, 0, 112, 222, 0, 333, 0, 1};
int[] x2 = { 334, 334, 112, 222, 334, 333, 334, 1 };
int[] y1 = { 100, 200, 300, 300, 1, 300, 300, 300 };
int[] y2 = { 100, 200, 0, 0, 1, 0, 300, 0 };
for (int i = 0; i < x1.Length; i++)
{
Line line = new Line();
Grid myGrid = gg;
line.Stroke = Brushes.Black;
line.X1 …Run Code Online (Sandbox Code Playgroud) 我需要一个可以接受以下数字格式的正则表达式。
+62 361 222777
+62 813-444-5555
+62 812-3333-3333
+62 811 391 2103
+62 361-2277777
(0361) 227337
+62 8113912103
08134455555
0361-2277777 (*)
+62 812 3333 3333 (*)
+62 877 80803550 (*)
081339222111 (*)
081 339 222 111 (*)
+62 811338429196 (*)
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止所做的:
\+62\s\d{3}[-\.\s]??\d{3}[-\.\s]??\d{3,4}|\(0\d{2,3}\)\s?\d+|0\d{2,3}\s?\d{6,7}|\+62\s?361\s?\d+|\+62\d+|\+62\s?(?:\d{3,}-)*\d{3,5}
Run Code Online (Sandbox Code Playgroud)
我上面的正则表达式没有完全找到最后六个数字(用*表示)。有人能帮我吗?谢谢。