首页 > 其他分享 >为什么字符数组比字符串更适合用于密码?

为什么字符数组比字符串更适合用于密码?

时间:2023-10-23 20:01:37浏览次数:38  
标签:字符 String char 密码 垃圾 数组 字符串 内存

内容来自 DOC https://q.houxu6.top/?s=为什么字符数组比字符串更适合用于密码?

在Swing中,密码字段有一个getPassword()(返回char[])方法,而不是通常的getText()(返回String)方法。同样,我曾经遇到过一种建议,即不要使用String来处理密码。

为什么String在涉及到密码时会对安全造成威胁?
使用char[]感觉不方便。


字符串是不可变的。这意味着一旦你创建了String,如果另一个进程可以转储内存,除了反射(参考维基百科:反射_(计算机编程)),否则没有办法在垃圾回收(参考维基百科:垃圾回收_(计算机科学))开始之前清除数据。

使用数组时,你可以在完成操作后显式地擦除数据。你可以用你喜欢的任何内容覆盖数组,密码将不会存在于系统中,即使在垃圾回收之前也是如此。

所以是的,这确实是一个安全问题 - 但即使只使用char[]也只能缩小攻击者的机会窗口,而且只针对这种特定类型的攻击。

正如评论中指出的,由于垃圾回收器移动数组可能会导致内存中留下数据副本的可能性。我认为这是实现特定的 - 垃圾回收器可能在所有内存被清除以避免这种情况的情况下清除所有内存。即使它这样做了,仍然有char[]包含实际字符作为攻击窗口的时间。

标签:字符,String,char,密码,垃圾,数组,字符串,内存
From: https://www.cnblogs.com/xiaomandujia/p/17783326.html

相关文章

  • c++ int数组存储long long元素
    高往低存,可能造成数据截断。如longlong64位,int32位,高32位被丢弃。可以将int数组每两个元素分别存储低32位和高32位inta[4];//隐式转换*a=2;//目标格式是int,2默认值默认值默认值*(longlong*)a=2;//目标格式是......
  • Python拆分列中文和 字符
    importpandasaspddefextract_characters(file_path,sheet_name,column_name):#读取Excel文件df=pd.read_excel(file_path,sheet_name=sheet_name)#创建两个新的列df['中文']=''df['其他字符']=''#遍......
  • Qt - Label标签显示特殊字符
    1.创建一个带Ui界面的测试工程,把特殊字符拷贝到label标签里,点击保存。 2.打开qt安装目录,找到designer.exe文件双击打开 3.把刚刚创建的ui界面拖进来 4.点击窗口-》ViewC++Code...5.会弹出一个窗口里面有ui文件的源码,还有一串特殊数字,这串特殊数字就是那个特......
  • JS 数组的扩展
    扩展运算符含义扩展运算符(spread)是三个点(...)。它好比rest参数的逆运算,将一个数组转为用逗号分隔的参数序列。console.log(...[1,2,3])//123console.log(1,...[2,3,4],5)//12345[...document.querySelectorAll('div')]//[<div>,<div>,<div>]该运算符主要......
  • [Leetcode] 0088. 合并两个有序数组
    88.合并两个有序数组题目描述给你两个按非递减顺序排列的整数数组 nums1和nums2,另有两个整数m和n,分别表示nums1和nums2中的元素数目。请你合并nums2到nums1中,使合并后的数组同样按非递减顺序排列。注意:最终,合并后数组不应由函数返回,而是存储在数组nums1......
  • java8 map过滤 map转字符串
    Map<String,Long>map=newHashMap<>();map.put("aaa",1L);map.put("bbb",2L);map.put("ccc",1L);Map<String,Long>map2=map.entrySet().stream().filter(e->e.getValue().intValue()>1).collect(Coll......
  • 从数组中删除假值
    您可以使用filter()来组合布尔值,以简化从数组中删除假值的过程。false值是将false视为条件的值,例如null、未定义、空字符串(“”或'')、0、NaN和false。Boolean是JavaScript的内置构造函数,它通过将值传递给它来将值转换为布尔值。在此示例中,布尔构造函数作为回调函数传......
  • [Leetcode] 0821. 字符的最短距离
    821.字符的最短距离题目描述给你一个字符串s和一个字符c,且c是s中出现过的字符。返回一个整数数组answer,其中answer.length==s.length且answer[i]是s中从下标i到离它最近的字符c的距离。两个下标 i和j之间的距离为abs(i-j),其中abs是绝......
  • 387. 字符串中的第一个唯一字符
    目录题目法一、字典法二、计数法三、字符串内置函数rindex()题目给定一个字符串s,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回-1。示例1:输入:s="leetcode"输出:0示例2:输入:s="loveleetcode"输出:2示例3:输入:s="aabb"输出:......
  • 53. 最大子数组和
    链接https://leetcode.cn/problems/maximum-subarray/description/思路1.在线处理法:对于一个连续的序列来说,如果它小于0,那么它对于周围所有的数组都是减益效果。试想一下,任何数与负数相加,都小于它本身。根据此,可以用在线处理法,O(n)的时间即可搞定。2.动态规划法:这个题存在中......