我需要"密码保护"我的应用程序,但需要建议安全地存储密码的位置.
我打算怎么做:
第一次运行程序时,我将提示用户创建密码.密码将被盐化并在SHA-256中进行散列,然后存储在注册表或文件中.
问题:
如果我将散列密码存储在注册表或文件(或两者)中,那么有人只需删除注册表或文件中的密钥并提示创建新密码就太容易了...
如何安全地存储哈希密码以使其更难被删除?
我已经考虑过将它存储在注册表中,并创建一个带有隐藏和系统属性的文件,以便在删除注册表文件的情况下读取,但这看起来很愚蠢,因为它也可以很容易地删除.
//我希望我用正确的标签正确地发布了这个问题 - 我是新来的,所以请放心!;)
祝一切顺利
克里斯(Shamballa)
我目前有Delphi 2010,最近刚买了一部iPhone(5天前),这是我第一次进入Mac世界.我非常喜欢它 - 它已经改变了我的生活.
如果这应该发布在其他地方,那么我道歉并将采取措施保持这个问题的开放,因为我真的需要你们的建议......
我的问题
我想开始为iPhone开发,但我不知道从哪里开始和我需要什么,好吧我知道我肯定需要Delphi XE2!所以这是一个先决条件,如上所述,我已经有了iPhone,但我还需要什么呢?
我真的需要一台物理Mac机吗?和开发者帐户?我查看了Apple网站,并相信我可以免费注册一个,但我还读到它每年要花费99美元.
对于已经为iPhone开发的人来说,列出我需要开始这个的所有先决条件是理想的.我认为这将是一次昂贵的尝试,所以我真的想在我完全承诺并投入真正的困难时间和金钱之前把事情弄清楚,这可能会让我变得更加灰色;)我有3个白发atm我真的想要尽量减少这一点!
我认为这可能是一个愚蠢的问题,但我已经对我应该做的最好的事情感到困惑.
在对密码哈希进行salting时,盐是否也应该被散列或保留为明文?
注意:我在SHA-256中散列密码,Salt是预定义的字符串,因为一次只能存储一个密码.
TIA
克里斯(Shamballa).
我正在尝试创建一个小工具来监控我使用了多少带宽以及我从ISP获得了多少带宽.他们有一个SOAP服务,我必须验证我的UserName和密码并验证客户端,然后我将得到2个GUID,必须传递给将从数组返回使用情况统计信息的函数.然后将它们缓存1小时,我必须再次进行身份验证.
我在Delphi 2010中使用了WSDL Importer,它为我生成了一个Unit.(我不确定我应该发布它,因为它非常大)?
我正在尝试用我的用户名和密码验证第一部分,代码如下:
procedure TForm1.btnAuthClick(Sender: TObject);
var
fGUID: string;
begin
HTTPRIO1.URL := 'https://webservices.zen.co.uk/broadband/v3.11/serviceengine.asmx?WSDL';
try
fGUID := (HTTPRIO1 as ServiceEngineSoap).Authenticate(edtUserName.Text,edtPassword.Text);
Label1.Caption := fGUID;
except
on E: Exception do
Memo1.Lines.Text := E.Message;
end;
end;
Run Code Online (Sandbox Code Playgroud)
上面的代码总是返回以下错误:
标题http://schemas.xmlsoap.org/ws/2004/08/addressing:最终收件人的操作是必需的,但不在消息中.
我尝试使用WSDLLocation代替服务和端口:
procedure TForm1.btnAuthClick(Sender: TObject);
var
fGUID: string;
begin
HTTPRIO1.WSDLLocation := 'https://webservices.zen.co.uk/broadband/v3.11/serviceengine.asmx?WSDL';
HTTPRIO1.Service := 'ServiceEngine';
HTTPRIO1.Port := 'ServiceEngineSoap';
try
fGUID := (HTTPRIO1 as ServiceEngineSoap).Authenticate(edtUserName.Text,edtPassword.Text);
Label1.Caption := fGUID;
except
on E: Exception do
Memo1.Lines.Text := E.Message;
end;
end;
Run Code Online (Sandbox Code Playgroud)
这将始终生成以下错误:
无法从WSDL"https://webservices.zen.co.uk/broadband/v3.11/serviceengine.asmx?WSDL"中检索服务/端口"ServiceEngine"/"ServiceEngineSoap"的URL端点
我在这做错了什么?如果我实际上应该发送一个标题,那么我该如何做这个来验证自己的服务?
我正在使用Barcode Studio 2011将QR码绘制到Graphics32 - TImage32组件中,我希望以png格式保存它,但是白色是透明的,这是我在Graphics32的OuterColor中指定的.
OnFormCreate我有
procedure TForm1.FormCreate(Sender: TObject);
begin
psBarcodeComponent1.BarCode := 'some text here...';
end;
Run Code Online (Sandbox Code Playgroud)
目前我已将绘画分配给按钮点击事件
procedure TForm1.Button8Click(Sender: TObject); // Paint the barcode
var
bmp: TBitmap32;
Coords: TRect;
begin
bmp := TBitmap32.Create;
bmp.SetSize(image.Width, image.Height);
bmp.Canvas.Brush.Color := color;
bmp.Canvas.Rectangle(-1, -1, image.Width+2, image.Height+2);
bmp.DrawMode := dmTransparent;
bmp.OuterColor := clWhite;
// make Coords the size of image
Coords := Rect(0,0,image.Width,image.Height);
psBarcodeComponent1.PaintBarCode(bmp.Canvas, Coords);
image.Bitmap.Assign(bmp);
end;
Run Code Online (Sandbox Code Playgroud)
我正在使用Vampyre成像库将Bitmap转换为PNG格式,但我很乐意使用任何库,功能和建议 - 我一直试图这样做近一个星期!我已阅读并重新阅读了graphics32以及Vampyre Imaging Library的文档,但我尝试的任何内容都不会将白色转换为透明色.我已经尝试了clWhite,clWhite32并且还将drawMode设置为dmBlend并且应用ChromaKey功能都无济于事但是很多挫折,咖啡和一点啤酒也;)
这是我如何保存它...
procedure TForm1.Button7Click(Sender: TObject); // Save with Vampyre Imaging Lib
{ Try to …Run Code Online (Sandbox Code Playgroud) 我正在运行delphi(2010)的.bat文件.
procedure TForm1.Button2Click(Sender: TObject);
var sCmd: String;
Begin
sCmd := Pwidechar('b4a_c2dm.bat' +' ' +'send ' + Trim(Edit1.Text)+' ' + Trim(edit2.Text ));
ShellExecute(0, 'open', 'b4a_c2dm.bat', PChar(sCmd), nil, SW_SHOWMAXIMIZED);
end;
Run Code Online (Sandbox Code Playgroud)
这将打开cmd.exe并在cmd.exe中传递正确的字符串,但是
一些.bat文件中的行(java -cp b4a_c2dm.jar anywheresoftware.b4a.c2dm.C2DM%*)如何显示在cmd.exe窗口中,而不是让.bat文件完成其工作.
有人可以帮我弄这个吗.
我昨天下载了一个程序,它用于加密和安全.我不会在这里命名,除非有人问我,但它有一个功能,使文件在指定的文件夹内完全不可见.
我有隐藏文件和文件夹 - 选中并隐藏受保护的操作系统文件 - 未选中但文件已完全从视图中删除,也不会显示在搜索中.我将文件夹从VMware Workstation复制到我的主机,但文件仍然是超级隐藏的!根据Windows,文件夹中没有文件.
这个伏都教魔法怎么可能?我想在我自己的加密程序中使用Delphi来模拟这个.我没有找到任何方式在这里和通过谷歌建议如何可能但实际程序帮助文件说他们仍然在文件夹但不注册处理文件的大多数正常的Windows软件.
这是其中一个问题,我不能给出任何代码来展示我尝试过的东西,而是接受我可以尝试的建议,或者这里有人知道它是如何完成的?
我正在写一个小密码生成器,并有4个CheckBoxes的组合,这些是:大写字母,小写字母,数字和特殊字符.
我的问题是 - 我是否必须通过"if"语句检查逻辑中每个可能的CheckBoxes组合,或者是否有更快,更简单的方法可以缩短代码?
如果这个问题相当愚蠢,我很抱歉,但如果确实有更好的方法,那将来我真的可以从中学习.
祝一切顺利
克里斯(shamballa).
我正在动态创建一个覆盖CreateParams的Form,以便我可以在TaskBar上显示它.从动态创建的Form,我调用一个TColorDialog但是一旦显示,我的Form将在MainForm下面,ColorDialog就在它之上.
关闭ColorDialog后,动态Form将返回MainForm.
我在ColorDialog Execute方法中看到有一个Handle可以传递,但我不确定我是否在正确的轨道上?
如果我在MainForm上的Dialog下点击它会闪烁,但我怎么能让动态创建的Form"拥有"这个对话与后面的MainForm?
我像这样创建表单:
procedure TMain.Button1Click(Sender: TObject);
var
SEMArcF: TWriteSEMArcFrm;
begin
SEMArcF := TWRiteSEMArcFrm.Create(nil);
SEMArcF.Show;
end;
Run Code Online (Sandbox Code Playgroud)
它在OnClose事件中被释放:
procedure TWriteSEMArcFrm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
Run Code Online (Sandbox Code Playgroud)
我正在覆盖CreateParams,如下所示:
procedure TWriteSEMArcFrm.CreateParams(var Params: TCreateParams);
begin
inherited;
if (FormStyle = fsNormal) then begin
Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
Params.WndParent := GetDesktopWindow;
end;
end;
Run Code Online (Sandbox Code Playgroud)
并显示ColorDialog我要么创建它,要么在Form上只有一个TColorDialog组件,无论哪种方式都会产生相同的结果.我希望它由动态表单拥有.
编辑 我现在添加:
Application.ModalPopupMode := pmAuto;
Run Code Online (Sandbox Code Playgroud)
完整代码:
procedure TWriteSEMArcFrm.btnBackColourClick(Sender: TObject);
var
ColorDlg: TColorDialog;
begin
Application.ModalPopupMode := pmAuto;
ColorDlg := TColorDialog.Create(nil);
try
if ColorDlg.Execute then
re.Color := ColorDlg.Color; …Run Code Online (Sandbox Code Playgroud) 这就是我"努力"实现的目标
我有一个生成密码的函数,然后我将其添加到TStringList中,之后我应该使用这些项填充VirtualTreeView,但是我没有运气这么做.应该如何以正确的方式完成?我还在学习,不是专业人士.
我的生成密码的功能:
function Generate(AllowUpper,AllowLower,AllowNumbers,AllowSymbols:Boolean; PassLen:Integer):String;
const
UpperList = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
LowerList = 'abcdefghijklmnopqrstuvwxyz';
NumberList = '0123456789';
SymbolList = '!#$%&/()=?@<>|{[]}\*~+#;:.-_';
var
MyList : String;
Index : Integer;
i : Integer;
begin
Result:='';
MyList:='';
//here if the flag is set the elements are added to the main array (string) to process
if AllowUpper then MyList := MyList + UpperList;
if AllowLower then MyList := MyList + LowerList;
if AllowNumbers then MyList := MyList + NumberList;
if AllowSymbols then MyList := MyList + …Run Code Online (Sandbox Code Playgroud) 我正在使用这个名为TProcessInfo的非可视化开源组件来获取进程列表,ProcessID以及我放入ListView的完整路径.
我用来执行此操作的代码:
procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
Process: TProcessItem;
begin
for i := 0 to ProcessInfo1.RunningProcesses.Count -1 do
begin
Process := ProcessInfo1.RunningProcesses[i];
with lv.Items.Add do
begin
Caption := Process.ExeFile;
SubItems.Add(IntToStr(Process.ProcessID));
SubItems.Add(Process.FullPath);
end;
end;
end;
Run Code Online (Sandbox Code Playgroud)
代码将始终在最后一行中断:SubItems.Add(Process.FullPath);我收到一条错误消息:
系统错误.代码:87
参数不正确.
在Component中获取FullPath的代码是:
function TProcessItem.GetFullPath: TFileName;
var
hProcess: THandle;
begin
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,False,FProcessID);
if hProcess <> 0 then
begin
try
SetLength(Result,MAX_PATH);
FillChar(Result[1],Length(Result) * SizeOf(Char), 0);
if GetModuleFileNameEx(hProcess,0,PChar(Result),Length(Result)) > 0 then
Result := Trim(Result)
else
RaiseLastOSError;
finally
CloseHandle(hProcess)
end; …Run Code Online (Sandbox Code Playgroud) delphi ×11
delphi-2010 ×2
delphi-xe2 ×2
passwords ×2
security ×2
batch-file ×1
hidden-files ×1
https ×1
image ×1
iphone ×1
logic ×1
modal-dialog ×1
png ×1
process ×1
save ×1
soap ×1
transparency ×1