用Silverlight打造一个相对安全的密码控件

用Silverlight打造一个相对安全的密码控件,第1张

概述笔者最近的一个项目涉及到了支付动作,出于安全考虑,需要在密码控制上防键盘记录,传输加密等进行处理,其中难点在于防键盘记录。 现有的银行、支付宝、财付通、快钱等的支付控件都是自行开发,还需要对控件进行证书签名,这样相对成本较高。 笔者经过多方探讨研究,找到一个低成本的密码控件制作方法,那就是采用Silverlight为载体 ,不需要进行证书签名,好了,不扯废话了,上代码: 用VS2010新建一个Si

笔者最近的一个项目涉及到了支付动作,出于安全考虑,需要在密码控制上防键盘记录,传输加密等进行处理,其中难点在于防键盘记录。

现有的银行、支付宝、财付通、快钱等的支付控件都是自行开发,还需要对控件进行证书签名,这样相对成本较高。

笔者经过多方探讨研究,找到一个低成本的密码控件制作方法,那就是采用Silverlight为载体 ,不需要进行证书签名,好了,不扯废话了,上代码:

用VS2010新建一个Silverlight项目(我这里使用的是Silverlight5),将控件里的所有元素的宽和高都去掉,这样能够实现自适应大小,在HTML里控制密码框的大小。

xaml代码如下:

<UserControl x:Class="PaymentControl.MainPage"    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    xmlns:d="http://schemas.microsoft.com/Expression/blend/2008"    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"    mc:Ignorable="d"     Loaded="UserControl_Loaded" SizeChanged="UserControl_SizeChanged">    <GrID x:name="LayoutRoot">        <TextBox HorizontalAlignment="left" margin="0,0" name="password" VerticalAlignment="Center" Text="" borderThickness="0"  LostMouseCapture="password_LostMouseCapture" GotFocus="password_GotFocus" LostFocus="password_LostFocus" Background="White" />    </GrID></UserControl>

关键代码:

1、模拟键盘:

        [Dllimport("user32.dll")]        static extern voID keybd_event(byte bVk,byte bScan,uint DWFlags,uint DWExtraInfo);        [Dllimport("user32.dll")]         static extern byte MapVirtualKey(byte wCode,int wMap);


2、我们在TextBox的方法里加上LostMouseCapture事件

        private voID password_LostMouseCapture(object sender,System.windows.input.MouseEventArgs e)        {            KeyDownControl();            Thread a = new Thread(SetEnable);            a.IsBackground = true;            a.Start();        }        delegate voID setTextBoxReadonlyState(bool a);        private voID setTextBoxReadonly(bool a)        {            setTextBoxReadonlyState myDelegate = new setTextBoxReadonlyState(SetTextBoxReadonlyMethod);            this.dispatcher.BeginInvoke(myDelegate,a);        }        private voID SetTextBoxReadonlyMethod(bool a)        {            password.IsReadonly = a;        }        private voID SetEnable()        {            setTextBoxReadonly(false);        }        private voID KeyDownControl()        {            password.IsReadonly = true;            int p = Next(5,15);            for (int i = 4; i < p; i++)            {                byte RandKey = Next(32,126);                keybd_event(RandKey,MapVirtualKey(RandKey,0),0);//按下                    keybd_event(RandKey,0x2,0);//放开                Thread.Sleep(10);            }        }        private byte Next(int min,int max)        {            Random ran = new Random();            byte RandKey = (byte)ran.Next(min,max);            return RandKey;        }


3、LostMouseCapture事件是整个处理的核心,由其触发密码文本混淆策略。密码混淆策略的核心就是在textBox获得焦点的时候模拟键盘输入一堆随机文本,这样做即使截获了密码文本,也是无用的。


上截图,测试时我输入的内容是asdf

代码基本上完了,请各位看客拍砖的时候轻点!


 总结

以上是内存溢出为你收集整理的用Silverlight打造一个相对安全的密码控件全部内容,希望文章能够帮你解决用Silverlight打造一个相对安全的密码控件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1009898.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-22
下一篇2022-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存