`

【面试】数据库加密保存用户密码

阅读更多
1.先用MD5加密(会产生部分乱码),然后用BASE64编码(没有乱码了)
B/S系统,将用户的密码用MD5加密为64个字符存在数据库中。

于是我有点不解,密码学才丢掉一年了,我怎么不记得MD5可以编码为64个字符.   不得不翻出已经铺上一层灰的密码学:
MD5加密是对任意长的数据使用MD5哈稀算法散列为4个32位组,若格式化为ASCII字符则为16字符,若格式化16进制表示,则为32字符.  (MD5的具体算法请参阅相关书籍和资料)
MD5广泛用于数据校验和完整性检验.且不可逆.理论上为抗碰撞的.

在2004年8月17日,MD5遭遇重创,山东大学的王小云做了破译MD5、HAVAL-128、 MD4和RIPEMD算法的报告。(^_^如果大学选择继续读硕,我肯定会去考王小云的导师,呵)   看来MD5会正式让位于SHA1了.

回到正题,后来我发现在Asp.Net2.0自带的Membership中的用户密码可以使用MD5加密保存,而据我分析,其并非十六进制格式化字符串,而是采用Base64编码保存.

Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。

Base64要求把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。

2.如何避免两个用户的密码相同
这样一来,方案就基本定下来,MD5加密后再Base64编码.后来我又发现一个问题,若单纯这样做,会有一个问题,那就是如果两个用户密码相同,就会导致在数据库中保存的数据一样,  回想当初学认证理论的时候,讲过可以用盐值来解决这个问题,就是给每个用户生成一个随机的盐值,在作保存和校验时,需要把用户的Salt值加入到密码原文中再作MD5运算,这样就可以使得相同的密码生成不同的编码.

3.为什么不可以直接MD5,而非要加一步BASE64呢
哈希函数:MD5,SHA 是没有密钥的,相当与指纹的概念,因此也是不可逆的;
md5是128位的,SHA有不同的算法,有128,256等位。。。如SHA-256,SHA-384

Base64,它将byte[]数组进行了转换,为什么要转换呢?就是因为很多加密后的密文后者一些特殊的byte[]数组需要显示出来,或者需要进行传递(电子邮件),但是直接转换就会导致很多不可显示的字符,会丢失一些信息,因此就转换位Base64编码,这些都是可显示的字符。所以转换后,长度会增加。它是可逆的。
分享到:
评论

相关推荐

    知名大公司出的net面试题.doc

    在J2EE环境中,持久对象通常是指代表数据库中实体的Java对象,它们的状态可以通过对象关系映射(ORM)工具如Hibernate或JPA来保存和恢复。这些对象可以通过DAO(Data Access Object)接口与数据库进行交互,实现...

    Mysql----MySQL面试题和答案.rar

    - 安全最佳实践,如定期更改密码,限制远程访问,使用SSL加密连接。 以上只是MySQL面试中可能涉及的一部分知识点,实际面试可能会更深入,比如性能调优、复制与高可用性、云数据库服务等。通过深入学习和实践,你...

    关于JAVA企业面试题

    Java企业面试题通常涉及到... - 安全性:密码需要加密存储,登录时需要进行密码的哈希验证。 这些知识点体现了Java Web开发中的常见技术和最佳实践,对于求职者来说,理解和掌握这些内容将有助于在面试中表现出色。

    shouhu 面试 java 比较全的题目.pdf

    ORM工具将POJOs映射到数据库表,自动处理数据的保存、读取和更新。 3. 加密算法: - 加密算法包括很多种,例如:DES(Data Encryption Standard)、AES(Advanced Encryption Standard)、RSA(Rivest-Shamir-...

    简易网银管理系统搭建过程与结果演示

    为了保护用户隐私,敏感信息如密码应进行加密存储。转账功能中,应当引入事务处理和锁机制,确保在并发情况下数据的一致性,避免因并发导致的转账错误。此外,转账失败的处理应该有更完善的逻辑,如检查账户余额、...

    2024秋招and春招-悦能智能科技面试题.txt

    - 哈希加密:不可逆加密,用于存储密码的哈希值,常见算法有MD5、SHA等。 6. 数据库中怎么实现数据分类? 在数据库中实现数据分类通常使用的是: - 多表结构:通过创建多个表来分类存储不同类型的数据。 - 外键关系...

    总结Python爬虫面试题.pdf

    2. Cookie处理:保存服务器返回的Cookie,并在后续请求中携带。 3. 加密问题:可能需要解密POST数据,如使用Burp Suite或Wireshark抓包分析。 六、分布式爬虫 1. 分布式原理:通过多个爬虫节点并行抓取,提高效率,...

    java考核系统.rar

    - **数据加密**:对敏感信息如用户密码进行加密存储,保障信息安全。 6. **技术支持与服务**: 提供的技术支持服务可能包括问题排查、故障修复、系统升级、定制化开发等,确保用户在使用过程中遇到问题能够得到...

    护网面试题总结+DD安全工程师笔试问题

    本文将对护网面试题总结+DD安全工程师笔试问题进行详细的知识点解析,涵盖了Java、Android、Linux、Windows、网络安全、数据库等多个方面的知识点。 1. JNI 函数在 Java 中函数名为 com.didi.security.main,C 中的...

    Linux面试题与答案

    ### Linux面试题与答案知识点详解 #### 1. Linux系统中的文件类型与设备 - **普通文件**:最常见的文件类型,包含数据。 - **目录文件**:存储其他文件或目录的容器。 - **链接文件**:指向另一个文件的指针。 - **...

    【面试资料】-(机构内训资料)Redis面试题(二).zip

    1. 认证与加密:设置密码认证,启用SSL保护数据传输安全。 2. 监控工具:如Redis Monitor、RedisInsight等,实时查看Redis运行状态。 3. 操作审计:记录所有命令执行,便于排查问题。 九、Redis在实际应用中的场景 ...

    小米运维面试题目(1).docx

    - 用户登录时,系统将输入的明文密码加密并与保存的密文密码比较。 - **知识点拓展**:了解shadow文件的结构及其安全性。 **题目6:RAID配置** - **知识点8:RAID配置与性能** - RAID 1提供镜像备份,RAID 5...

    java软件工程师面试基本题.docx

    4. **"记住我"功能实现**:通常通过设置长期有效的Cookie存储加密的账号和密码,再次访问时,服务器根据Cookie中的信息查找用户信息,实现自动登录。 5. **MyBatis整合Spring**:MyBatis可以通过Spring的XML配置或...

    java面试\java面试题总结_

    - **Session**: 安全性更高,适用于需要保存用户登录状态等场景。 #### 7. JSP页面的文件包含方式 - **问题**: JSP页面如何实现文件包含? - **解答**: JSP提供了`<%@ include file="..." %>`指令和`...

    2021年java软件工程师面试基本题.docx

    "记住我"通常通过设置长期Cookie实现,将用户的认证信息(如加密的用户名和密码)存储在Cookie中,下次登录时,如果Cookie存在,系统可以直接识别用户身份。 5. **MyBatis整合到Spring** MyBatis可以与Spring集成...

    Interview-reservation-system:面试预约系统

    - **文件I/O和数据库接口**:用于读写数据,如保存用户信息、职位详情和面试记录。C++标准库提供基本的文件操作,而数据库接口可能需要第三方库如SQLAPI++或ODBC。 - **多线程编程**:用于并发处理用户请求,提高...

    JAVA培训资料面试宝典

    3. **WebLogic自动登录**:在启动脚本中设置用户名和密码,或在`boot.properties`文件中存储加密后的凭证,简化了日常管理和维护工作。 以上内容覆盖了Java编程的基础知识点,从语言特性到Web开发框架,旨在帮助...

    shiro笔记整理.docx

    Realm 将从数据库中获取用户信息,并对比密码(通常经过盐值加盐加密)以验证用户。 2. **授权(Authorization)**: 授权是确定已认证的用户是否有权访问特定资源或执行特定操作。Shiro提供了多种方式实现授权,...

Global site tag (gtag.js) - Google Analytics