不是不想做高科技,在没有能力做高科技时就把低科技做得稳定、成熟、绝对可靠,能重复利用吧,欢迎阅读草根技术博文

[什么是幸福?天天在做自己想做的事情,家人、同事、朋友、客户、网友都和和睦睦,身体健康、钱包鼓鼓、身边美女同事多多赏心悦目、生活无忧无虑就是最大的幸福]

少废话、少广告,直接看下图

 

1:用户名可以不加密、但是密码需要在公司的加密能力内以不可逆的方式进行单项加密,至少是要保证同等水平的人无法破解,效果看图。

我有一个好朋友,刚参加工作3-4年的样子,他在杭州工作、软件开发水平蛮厉害、工作也负责的那种,开发公司的内部薪资管理系统,当他看到他的主管的薪水只有6000后,几乎要绝望崩溃了,因为他的主管接近工作了7-8年,而且能力还不错,他自己已月薪5000,但是还希望能更高一些,但是他知道了他的主管也就税前6000后,差点儿崩溃了。

A:怎么可能他能拿主管还高的薪水?

B:他就是干得比主管还好,能拿多少呢?

C:他的前途一片迷茫了,杭州的房价目前是2万左右,啥时候才能买房子娶老婆?

其实他不知道主管的薪水吧,可能还干劲十足,想干得更好、更出色,对前途一片憧憬,但是他的上级主管才能拿这么点儿后,可能开始动摇了,一切都可能发生变化了,其实在打工的时候我最怕我身边的人薪资都比我低、我最开心的是,周围的人都比我拿得高,因为这样我才有加薪的希望、前途一片光明。

   若在管理软件的开发过程中、测试工程中、使用过程中,能有一定的数据保密手段,那至少我的好朋友也不会对未来绝望、在这个公司可能开开心心、干劲十足的工作几年,就像我们知道明天地球就要毁灭大家都要挂掉了,还有几个人还会好好干活了?还干个屁啊对吧,所以信息系统的保密工作还是需要加强的,特别是对敏感数据的保护、商业机密的保护措施一定要做到位,最起码需要有保护的意识,我们自己不要犯罪,但是不要引诱别人犯罪就好。

 

2:用户登录时、需要保存密码时,不管是B/S的C/S的架构,都需要有可逆的密码。

我们先看看B/S系统的例子

 

我们再看看配套的C/S系统的例子

 

   突然间想起来,接近10年前的事情,那时候还在宁波一家台资企业工作,当时公司来了一个有1年工作经验的程序员,公司要求他写一个登录程序,足足写了1周,最后没办法搞定了放弃了、缴枪了,原因很简单,做好一个经得起考验的登录程序,不容易,需要深入考虑的因素很多很多

 

   附上配套的,不可逆的C#加密函数参考。

代码
         ///   <summary>
        
///  用户密码加密函数
        
///   </summary>
        
///   <param name="password"> 密码 </param>
        
///   <returns> 加密值 </returns>
         public   static   string  md5( string  password)
        {
            
return  md5(password,  32 );
        }

        
///   <summary>
        
///  加密用户密码
        
///   </summary>
        
///   <param name="password"> 密码 </param>
        
///   <param name="codeLength"> 多少位 </param>
        
///   <returns> 加密密码 </returns>
         public   static   string  md5( string  password,  int  codeLength)
        {
            
if  ( ! string .IsNullOrEmpty(password))
            {
                
//  16位MD5加密(取32位加密的9~25字符)  
                 if  (codeLength  ==   16 )
                {
                    
return  System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(password,  " MD5 " ).ToLower().Substring( 8 16 );
                }

                
//  32位加密
                 if  (codeLength  ==   32 )
                {
                    
return  System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(password,  " MD5 " ).ToLower();
                }
            }
            
return   string .Empty;
        }

 

 

   再附上配套的,C#可加密解密的函数参考。

代码
     //
    
//  九 字符串加密解密部分
    
//

    
///   <summary>
    
///  DES数据加密
    
///   </summary>
    
///   <param name="targetValue"> 目标字段 </param>
    
///   <returns> 加密 </returns>
     public   static   string  Encrypt( string  targetValue)
    {
        
return  Encrypt(targetValue,  " Project " );
    }

    
///   <summary>
    
///  DES数据加密
    
///   </summary>
    
///   <param name="targetValue"> 目标值 </param>
    
///   <param name="key"> 密钥 </param>
    
///   <returns> 加密值 </returns>
     private   static   string  Encrypt( string  targetValue,  string  key)
    {
        
return  SecretUtil.Encrypt(targetValue, key);
    }

    
///   <summary>
    
///  DES数据解密
    
///   </summary>
    
///   <param name="targetValue"> 目标字段 </param>
    
///   <returns> 解密 </returns>
     public   static   string  Decrypt( string  targetValue)
    {
        
return  Decrypt(targetValue,  " Project " );
    }

    
///   <summary>
    
///  DES数据解密
    
///   </summary>
    
///   <param name="targetValue"></param>
    
///   <param name="key"></param>
    
///   <returns></returns>
     private   static   string  Decrypt( string  targetValue,  string  key)
    {
        
return  SecretUtil.Decrypt(targetValue, key);
    }

        
///   <summary>
        
///  DES数据加密
        
///   </summary>
        
///   <param name="targetValue"> 目标值 </param>
        
///   <param name="key"> 密钥 </param>
        
///   <returns> 加密值 </returns>
         public   static   string  Encrypt( string  targetValue,  string  key)
        {
            
if  ( string .IsNullOrEmpty(targetValue))
            {
                
return   string .Empty;
            }

            var returnValue 
=   new  StringBuilder();
            var des 
=   new  DESCryptoServiceProvider();
            
byte [] inputByteArray  =  Encoding.Default.GetBytes(targetValue);
            
//  通过两次哈希密码设置对称算法的初始化向量   
            des.Key  =  Encoding.ASCII.GetBytes(FormsAuthentication.HashPasswordForStoringInConfigFile
                                                  (FormsAuthentication.HashPasswordForStoringInConfigFile(key, 
" md5 " ).
                                                       Substring(
0 8 ),  " sha1 " ).Substring( 0 8 ));
            
//  通过两次哈希密码设置算法的机密密钥   
            des.IV  =  Encoding.ASCII.GetBytes(FormsAuthentication.HashPasswordForStoringInConfigFile
                                                 (FormsAuthentication.HashPasswordForStoringInConfigFile(key, 
" md5 " )
                                                      .Substring(
0 8 ),  " md5 " ).Substring( 0 8 ));
            var ms 
=   new  MemoryStream();
            var cs 
=   new  CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 
0 , inputByteArray.Length);
            cs.FlushFinalBlock();
            
foreach  ( byte  b  in  ms.ToArray())
            {
                returnValue.AppendFormat(
" {0:X2} " , b);
            }
            
return  returnValue.ToString();
        }


        
///   <summary>
        
///  DES数据解密
        
///   </summary>
        
///   <param name="targetValue"></param>
        
///   <param name="key"></param>
        
///   <returns></returns>
         public   static   string  Decrypt( string  targetValue,  string  key)
        {
            
if  ( string .IsNullOrEmpty(targetValue))
            {
                
return   string .Empty;
            }
            
//  定义DES加密对象
            var des  =   new  DESCryptoServiceProvider();   
            
int  len  =  targetValue.Length  /   2 ;
            var inputByteArray 
=   new   byte [len];
            
int  x, i;
            
for  (x  =   0 ; x  <  len; x ++ )
            {
                i 
=  Convert.ToInt32(targetValue.Substring(x  *   2 2 ),  16 );
                inputByteArray[x] 
=  ( byte )i;
            }
            
//  通过两次哈希密码设置对称算法的初始化向量   
            des.Key  =  Encoding.ASCII.GetBytes(FormsAuthentication.HashPasswordForStoringInConfigFile
                                                  (FormsAuthentication.HashPasswordForStoringInConfigFile(key, 
" md5 " ).
                                                       Substring(
0 8 ),  " sha1 " ).Substring( 0 8 ));
            
//  通过两次哈希密码设置算法的机密密钥   
            des.IV  =  Encoding.ASCII.GetBytes(FormsAuthentication.HashPasswordForStoringInConfigFile
                                                 (FormsAuthentication.HashPasswordForStoringInConfigFile(key, 
" md5 " )
                                                      .Substring(
0 8 ),  " md5 " ).Substring( 0 8 ));
            
//  定义内存流
            var ms  =   new  MemoryStream();   
            
//  定义加密流
            var cs  =   new  CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);   
            cs.Write(inputByteArray, 
0 , inputByteArray.Length);
            cs.FlushFinalBlock();
            
return  Encoding.Default.GetString(ms.ToArray());
        }

 

 

 

软件的价值在于能重复利用、为人民提供有价值的服务。

吉日嘎拉 不仅权限管理 :的含义时,不只是C#ASP.NET通用权限管理,是一个整体的开发理念、分层理念、面向服务的理念、信息化建设的基础工具、帮程序员赚钱的开发辅助工具,帮业余开发者实现拥有自己的一套信息管理系统的强有力可参考的源码积累,当然也可以做为C#编程开发的入门标准教程。

 

 

将权限管理、工作流管理做到我能力的极致,一个人只能做好那么很少的几件事情。

About

吉日嘎拉可爱的女儿

吉日嘎拉(蒙古语为吉祥如意),2000年毕业于黑龙江大学计算机系软件专业,目前定居杭州,典型的IT软件土鳖一个,外号“软件包工头”。

 

通用权限管理系统组件(GPM - General Permissions Manager)自2003年开始发布,目前是国内注册用户和免费盗版用户最多的权限管理系统,是各种信息管理系统开发中彻底的权限解决方案。本组件支持多种主流数据库(Oracle、sqlsever、db2、mysql),功能强大,使用方便,代码简洁,思路严谨,被广大支持者称为权限管理系统中的“走火入魔级权限管理系统”。

 

精心维护通用权限管理系统组件(GPM - General Permissions Manager)有8年多,3年的不断推广,20万行经典的业务逻辑积累,经过上万次的调试修正,经历了四百个付费客户,上百软件公司的实战开发。

11年以上开发经验,外企工作5年,上市公司3年,独立经营软件公司2年,主持研发部门管理工作4年以上。

将权限管理、工作流做到我能力的极致,一个人只能做好那么很少的几件事情。

吉日嘎拉,通用权限管理系统组件
QQ:252056973,Mail:jirigala_bao@hotmail.com