美文网首页
ASP.NET-安全性-加密

ASP.NET-安全性-加密

作者: 柠檬正在努力 | 来源:发表于2020-03-25 17:33 被阅读0次
起因:

最近网上在加大检查力度,全国各省客户陆陆续续有报网络安全隐患

例子:

经技术检测发现,*****网站存在密码重置逻辑漏洞的通报, 发现该系统4位短信验证码,可以直接爆破,重置管理员密码。漏洞定位:*****页面。处置建议:*****

加密:

加密(encryption)是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容。加密可以用于保证安全性,但是其它一些技术在保障通信安全方面仍然是必须的,尤其是关于数据完整性和信息验证。加密在网络上的作用就是防止有用或私有化信息在网络上被拦截和窃取。

适用范围:
  • 密码
  • 验证码
  • 登陆名
加密位置:
  • js
  • 后台
  • 数据存储

此处只描述我比较用惯的方法,方法肯定不止这些的


一、javascript加密

大概是需要两层,一层是没有注册为服务器控件的input,用来存明文,也就是页面上看见的;一层是服务器控件,用来传加密后的密文到服务器;这个加密的过程呢是需要在前端javascript使用到加密方法的(包括①对称加密算法3DES、AES等,②MD5、SHA1等单向HASH算法,③特殊的单向HASH算法,④PBKDF2算法,⑥bcrypt、scrypt等算法等等,这里呢重点在js的处理,就不展开写加密的算法了)。
一般我用得简单的就是base64:

<script type="text/javascript">
    function test() {
        document.getElementById('password').value = base64encode(document.getElementById('input').value);
    }
    function base64decode(str) {
        var c1, c2, c3, c4;
        var i, len, out;
        len = str.length;
        i = 0;
        out = "";
        while (i < len) {
            /* c1 */
            do {
                c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
            }
            while (i < len && c1 == -1);
            if (c1 == -1)
                break;
            /* c2 */
            do {
                c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
            }
            while (i < len && c2 == -1);
            if (c2 == -1)
                break;
            out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));
            /* c3 */
            do {
                c3 = str.charCodeAt(i++) & 0xff;
                if (c3 == 61)
                    return out;
                c3 = base64DecodeChars[c3];
            }
            while (i < len && c3 == -1);
            if (c3 == -1)
                break;
            out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2));
            /* c4 */
            do {
                c4 = str.charCodeAt(i++) & 0xff;
                if (c4 == 61)
                    return out;
                c4 = base64DecodeChars[c4];
            }
            while (i < len && c4 == -1);
            if (c4 == -1)
                break;
            out += String.fromCharCode(((c3 & 0x03) << 6) | c4);
        }
        return out;
    }
</script>

input添加onkeyup="test()",键盘每松开一下就会给password赋加密后的值,效率会有点影响的,还要给每个控件加上位数限制MaxLength="50"

二、后台解密

这里呢其实就比较简单了,写个自己用的解密的函数即可,我这里就贴一个通用的base64解密意思意思

// base64编码
byte[] b = System.Text.Encoding.UTF8.GetBytes(jsons);
string base64jsons = Convert.ToBase64String(b);
base64jsons = base64jsons.Replace("+", "%2B");
// 解码
byte[] temp = model != null ? Convert.FromBase64String(model) : new byte[0];
string jsonRes = System.Text.Encoding.UTF8.GetString(temp);
三、 数据存储

切记切记,后台的数据存储的时候也一定要加密,方法什么的就自己选择,最后在数据库存的一定不可以是“123456”这样子的,密码,验证码,登陆名这些都一定要加密存储,管理和保存好自己的密钥。


需要注意的点:

使用javascript改变服务器控件的值是触发不了asp:TextBox的TextChanged事件的。
如果需要进行密码强度的限制的话要用到正则表达式在后台进行判断的。

<script type="text/javascript">
 (function(window){
 function $(id){
 return document.getElementById(id);
 };
 var arr = ["","低","中","高"];
 // 获取对象
 var ipt = $("ipt"),strength = $("strength"),strLength = $("strength_length");
 // 密码输入事件
 ipt.onkeyup = function(){
 var s = 0;
 var txt = this.value;
 if( /[a-zA-Z]/.test(txt) ){
 s++;
 };
 if( /[0-9]/.test(txt) ){
 s++;
 };
 if( /[^0-9a-zA-Z]/.test(txt) ){
 s++;
 };
 if( txt.length <6 ){
 s = 0;
 };
 strength.innerHTML = arr[s];
 strLength.className = "lv" + s;
 }
 })(window)
</script>

单纯的加密其实是会被各种各样的方法破解的,实际情况下还需要例如登陆或者修改密码的时候加入短信验证码/图片验证码,这部分自己写也可以,直接调用例如阿里云之类的接口也可以,验证码需要加入使用次数和时间限制,登陆尝试也要进行限制,超过多少次就锁定账号之类的。

<script type="text/javascript">
        function DisableButton() {
            $("#cmd").attr("disabled", "");
            clearInterval(timer);
        }
        var i = 90;
        var timer = null;
        function timers() {
            $(function () {
                if (i >= 0) {                    
                    $("#cmd").val("获取验证码" + i).attr("disabled", "disalbed");
                    i--;
                }
                else {                    
                    $("#cmd").val("获取验证码").removeAttr("disabled");
                    clearInterval(timer);
                }
            });
        }
        function startTimer(){
             timer = setInterval("timers()", 1000);   
        }
</script>

相关文章

  • ASP.NET-安全性-加密

    起因: 最近网上在加大检查力度,全国各省客户陆陆续续有报网络安全隐患 例子: 经技术检测发现,*****网站存在密...

  • AES对称加密

    AES对称加密安全性好,加密速度快。

  • RSA加解密及签名的用法

    加密分为对称加密,非对称加密, 不可逆加密。 对称加密:描述: 加密解密使用同样的密钥。特点: 速度快,安全性一般...

  • 端到端加密

    冯晓东 端到端加密无疑是软件安全性和隐私性的最高皇冠,端到端加密多少服务,端到端加密有多强,都决定了服务的安全性。...

  • 7 Go密码学(四) 非对称加密之RSA

    一、非对称加密概述 对称加密有非常好的安全性,其加解密计算的性能也较高,但其有两个重要缺点: 加密的安全性依赖于秘...

  • 密码学中的对称加密和非对称加密

    一、对称加密概念:加密和解密用同一对密钥的加密技术,叫对称加密。加密方式:DES、3DES、AES,安全性依次从低...

  • 非对称加密和对称加密

    非对称加密和对称加密在加密和解密过程、加密解密速度、传输的安全性上都有所不同,具体介绍如下: 1、加密和解密过程不...

  • 非对称加密和对称加密的区别

    非对称加密和对称加密在加密和解密过程、加密解密速度、传输的安全性上都有所不同,具体介绍如下: 1、加密和解密过程不...

  • 性能优化06-多dex加密

    性能优化06-多dex加密 dex加密是为了提高apk的安全性,保护源码。 一、dex加密的原理 使用加密库对ap...

  • 3.1 非对称加密简介

    非对称加密技术介绍 对称加密技术被称为初等加密技术,非对称加密技术即为高级数据加密技术,安全性更高。非对称加密算法...

网友评论

      本文标题:ASP.NET-安全性-加密

      本文链接:https://www.haomeiwen.com/subject/xxlxuhtx.html