`
dalongJDK
  • 浏览: 16003 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

为什么密码用char[]来存储比用String安全?

 
阅读更多
      如果密码是存储在 Java String 对象中的,则直到对它进行垃圾收集或进程终止之前,密码会一直驻留在内存中。即使进行了垃圾收集,它仍会存在于空闲内存堆中,直到重用该内存空间为止。密码 String 在内存中驻留得越久,遭到qie听的危险性就越大。
      更糟的是,如果实际内存减少,则操作系统会将这个密码 String 换页调度到磁盘的交换空间,因此容易遭受磁盘块qie听攻击。
      为了将这种泄密的可能性降至最低(但不是消除),您应该将密码存储在 char 数组中,并在使用后对其置零。(String 是不可变的,所以无法对其置零。)
分享到:
评论

相关推荐

    Java中char数组(字符数组)与字符串String类型的转换方法

    例如,当用户在`jPasswordField`中输入密码后,我们可能需要将获取到的`char`数组转换为`String`,以便存储或验证密码。在其他情况下,如格式化输出或拼接字符串时,可能会先将`String`转换为`char`数组,然后再进行...

    Java String Interview Questions.pdf

    18. 为什么char数组比字符串更适合存储密码? char数组比字符串更适合存储密码,因为char数组可以在使用完毕后被清除,而字符串不能被清除。 19. 字符串的subSequence()方法是什么作用? subSequence()方法用于从...

    Java中的String为什么是不可变的共7页.pdf.z

    同时,它的`char`数组(用于存储字符串)被声明为私有的,并且没有提供修改数组内容的方法。所有看起来像修改`String`的操作,如`substring()`、`concat()`或`replace()`,都会返回一个新的`String`对象,而原对象...

    单表密码C#实现

    在C#编程语言中实现单表密码,我们可以创建一个映射表或者使用数组来代表这个“单表”,然后通过遍历输入的字符串并根据这个表进行替换来完成加密和解密过程。下面我们将深入探讨如何在C#中实现这一概念。 1. **...

    置换密码的c++实现程序

    在实际应用中,为了增加安全性,我们可能需要使用更复杂的置换表,如使用一个随机生成的字符映射。同时,还需要处理非字母字符,以及考虑字符串的边界条件。在C++代码中,这些可以通过增加额外的逻辑和条件判断来...

    应用JAVA进行密码加密的一种算法

    在Java实现的部分,可以看到程序使用了`BufferedReader`来读取用户输入的密码,然后通过`transf(char c)`和`cryptograph(int[] n,int i)`方法进行加密处理。最后,加密后的密文存储在`String cryp`中。 这个算法...

    判断密码输入是否开启大写

    4. 使用哈希加盐(Hashing with Salt)的方式存储用户密码,保护用户信息安全。 5. 对用户输入进行验证,防止SQL注入等攻击。 以上就是针对"判断密码输入是否开启大写"这一问题的相关知识点,包括Java字符串处理、...

    Java换位密码加密解密

    在Java中,我们通常使用字符数组来存储和操作这些字母。我们可以创建一个简单的类`ShiftCipher`,包含加密和解密的方法,其中加密方法将字符向前移动,解密方法则向后移动。 ```java public class ShiftCipher { ...

    东北大学软件学院密码学Vigenere实验报告

    Vigenère密码是一种多表替换密码技术,它通过使用一组不同的凯撒移位表来提高加密强度,克服了单一凯撒密码容易被频率分析破解的缺点。 #### 二、实验目标 - **理解Vigenère密码的工作原理**:包括密钥的生成、...

    单表式密码破解代码

    我们使用一个 char 数组来存储密文中的每个字符,接着使用一个 for 循环来统计每个字符的频率。 在统计频率的过程中,我们将使用一个简单的哈希表来存储每个字符的频率值。我们使用一个 switch 语句来判断每个字符...

    hashString

    哈希表是一种数据结构,它使用哈希函数来存储和检索元素。在C++中,标准库提供了一个名为`std::unordered_map`的容器,用于实现哈希表。哈希表通过使用哈希函数将键(key)映射到桶(bucket),每个桶可以包含一个或...

    NC6用户密码重置

    1. **忘记密码场景**:当用户忘记密码时,管理员可以使用该脚本为用户生成一个新的临时密码。 2. **密码过期更新**:对于定期需要更新密码的安全策略,可以通过脚本批量更新用户密码。 3. **批量初始化**:在系统...

    C#凯撒密码的原理与实现

    至于SQL和DBA部分,虽然凯撒密码本身与数据库操作没有直接关系,但如果你需要存储和检索加密的数据,你可以考虑在数据库中创建一个字段来保存加密后的数据。在C#中,你可以使用ADO.NET或者Entity Framework来执行SQL...

    C#中数组遍历检验[密码校验]

    char.IsDigit(currentChar)) // 使用IsDigit方法检查字符是否为数字 { Console.WriteLine("密码中含有非数字字符:'" + currentChar + "'"); } } ``` 在这个例子中,我们通过`for`循环遍历`password`字符串的每...

    C#简单实现凯撒密码算法

    - **安全性和破解**:了解为什么凯撒密码在现代密码学中被认为是不安全的,探索现代加密标准如AES。 - **错误处理**:在实际应用中,要考虑输入验证,防止空字符串、负偏移量等情况。 通过以上介绍,你已经掌握了...

    c语言密码登陆界面代码

    对于更复杂的应用场景,还需要考虑更多的安全性和用户体验方面的问题,比如使用更安全的密码存储方式、增加图形用户界面等。 通过学习此类代码,开发者可以逐步构建更加完善和复杂的用户认证系统。

    Simple Encrypt and Decrypt String App in Python

    在Python编程语言中,...总结来说,Python为加密和解密提供了丰富的工具和库,无论是简单的替换加密还是复杂的块密码,都能轻松实现。在实践中,理解这些基础知识并结合适当的加密策略,可以有效地保护数据的安全性。

    随机密码生成器

    总之,随机密码生成器是通过使用C#的随机数生成功能和自定义字符集来实现的。它可以轻松地进行扩展,以满足各种安全性要求和用户自定义选项。通过结合配置文件,可以提供更灵活的用户体验。在VS2012中,使用.NET ...

    MD5.rar_md5string

    MD5在信息安全领域扮演着重要角色,例如文件校验、密码存储等。 在提供的标题"MD5.rar_md5string"中,我们可以推测这是一个关于MD5实现的压缩包,特别关注的是生成MD5字符串的功能。"MD5String"可能是一个函数或类...

Global site tag (gtag.js) - Google Analytics