我有一堆对象ArrayList,如果我调用ArrayList.remove(object)我是否需要做任何其他事情从内存中删除对象?我正在以相当快的速度添加和删除此列表中的对象,因此如果它没有从内存中删除,它将开始占用空间并开始放慢游戏速度.
我正在开发一个 Java 服务,该服务记录了一个安全错误,涉及存储在 Java String 对象中的秘密。
令人担忧的是,一旦密码存储在 a 中String,它就会保留在字符串池中,直到被垃圾收集,并且可能会以明文形式显示在转储中。
我理解Java的String类是不可变的,最好将秘密或密码存储在可变的类中,这样在使用后可以尽快从内存中删除。
参考
然而,我发现在使用第三方库时这是不切实际的,因为他们中的许多人都希望将请求中的密码或秘密作为 String 对象传递,无论我多么安全,在我的代码中,最终都会将数组转换char[]为String,这让我们回到了最初的问题,不是吗?
那么,是否有办法将 achar[]或转换StringBuffer为 a String,而不回到原来的问题?
编辑:正如这个问题和其他类似问题中的评论所指出的,许多人认为这不是真正的问题,因为如果您不拥有应用程序中的所有代码(即不拥有),则没有简单的方法可以避免此问题不要将秘密传递给任何第三方库)。鉴于此,也许问题就变成了
我该如何反驳该错误?Oracle/Owasp 或任何说“无法解决的问题”的人是否有可靠的参考资料?
我刚才在网上找到了"lua aes"解决方案.并对其安全性表示担忧.
它指出:
- 不要用于真正的加密,因为加密时可以轻松查看密码.
它在"文件加密测试"脚本中说这个.
我的问题是:
为什么会这样,加密字符串并将其写入文件有什么不同?
如何在加密时查看?加密后它是否可见?
基本上,使用与否是安全的吗?
是否有人可以确认使用过它的人?我邮寄了原始开发者,但电子邮件地址无效.
我应该使用它吗?
请问我有以下场景:
该应用程序使用密码通过 HTTPS 访问某些远程 Web 服务;
为此,应用程序会询问用户密码,但不会将其存储在设备上(并以安全的方式使用它来访问网络服务)。
我担心的是:理论上可以访问内存以读取其中包含的数据并最终检索密码。
请问我该如何防止这种情况发生?
谢谢
我知道人们以前曾问过这个问题,但是他们没有使用.equals()。所以我要再问一遍,为什么我有两个字符串,但是当我将它们与之比较时,.equals()我得到了错误。这两个字符串是1234(passwordField2.getPassword()和String s = bufferedreader.readLine()。),我已经使用s.toCharArray对其进行了比较,这是相同的。我尝试将它们都打印出来
1234
1234
有人知道为什么会这样吗?谢谢!
爪哇 8
我有一个 POJO 类:
class User {
private String name;
private String password;
//... Getters / Setters ...
}
Run Code Online (Sandbox Code Playgroud)
我将用作实体类。
在 getter/setter for 中password,我想添加解密/加密逻辑。
public String getPassword() {
return EncryptionFactory.decryption(password);
}
public void setPassword(String password) {
this.password = EncryptionFactory.encryption(password);
}
Run Code Online (Sandbox Code Playgroud)
EncryptionFactory是一个加密/解密 a 的实用程序类String。
根据通用 Java 编码指南,如果我添加更改密码的逻辑,它是否破坏了设计或设计不良?
在使用它时,我从我的教授那里得到了糟糕的设计反馈。
目前我正在使用特定的方案来保护密码,我认为我有一些需要改进的地方.实现是在Java中,所以我更喜欢使用SHA-2 512作为加密形式.
目前我有一个客户端 - 服务器模型,所以这些事情可能发生:
我有这些问题:
当想要破解密码时,攻击者通常会创建冲突攻击.但是碰撞攻击如何足够?如果密码需要用于其他应用程序,如Outlook.com,Facebook或其他任何应用程序(可能使用另一种盐,因为它们与我的应用程序无关),那么碰撞攻击如何呢?你不需要真正的密码吗?
SHA-2 512是否已经使用迭代?即使如此,我是否应该更改加密方法以自动使用多次迭代以及首选多少次迭代?我还读过关于使用随机数量的迭代(在一个范围内),如何确定性地存储随机因子?
我应该为服务器代码中的每次迭代存储系统机密吗?请参见http://blog.mozilla.org/webappsec/2011/05/10/sha-512-w-per-user-salts-is-not-enough/.我可以存储一个数组,它会为每次迭代保留一个静态秘密,第n个秘密用于第n次迭代.没有人能够知道秘密,它们被计算一次(我想加密一些随机字符串),然后基本上存储在服务器的RAM中.
目前我将输入的密码从客户端发送到服务器,只需SHA-2_512(密码),是否应该改进此过程,如果是,如何进行?我不能使用盐,因为客户没有盐.
问候.
在讨论中,我们的一位大四学生告诉我们不应该使用String在Java项目中存储密码,因为它存在安全风险.但它在C项目中是可以接受的.我不明白为什么他这么说.谁能告诉我为什么这样?
我想创建一个登录框架.我将密码保存在数据库中.getPassword()每次新的加密字符数组时,该方法都会返回.
String pass = txtPass.getPassword().toString();
Run Code Online (Sandbox Code Playgroud)
那么如何比较存储在数据库中的密码和用户给出的密码?
我需要一些指导,我需要检查来自UI表单(即Authentication对象)的密码,我需要使用SHA-256 + constant salt(在进行比较之前)进行哈希处理,密码来自DB(DB也有密码+盐)使用Spring安全.
我想比较使用相同的SALT值生成的这两个不同的散列值.我们如何在java中做到这一点?有人可以分享一下示例代码吗?
为了使其更适用于其他人,我想知道写代码是多么逼真,它会将消息加密到没有密码就不可能被解密的程度.我认为最好的方法是制作哈希算法并添加随机性.那么业余爱好者编写声音加密有多现实?任何工程师都能破解业余加密算法吗?编辑:几个答案讨论了对计算机内存的攻击,这是我很欣赏的有用信息,但我更感兴趣的是知道该消息是否可以直接解密.我假设cryptoanalyser无法访问计算机混淆消息,因为如果他这样做他无论如何都可以查看我的源代码并找到解密算法.这是我的例子:
public class Keys { // hold the methods and information used to lock, unlock, make the key, get the "keypad" after it has been locked, and a static method to change int[] to long[]
// Fields
private String passphrase;
private long[] key;
private long keynum;
private long[] pad;
Random rands = new Random();
// Constructors
public Keys (String passphrase) // makes a key based of the given passphrase
{
this.passphrase = passphrase;
key = keycipher(this.passphrase.toCharArray());
key = keyfix(key);
keynum …Run Code Online (Sandbox Code Playgroud)