相关疑难解决方法(0)

编译后如何存储变量?

我在我的程序(用Java编写)中有一个变量:

String myPassword
Run Code Online (Sandbox Code Playgroud)

在使用Android Studio编译代码后,我得到了一个Android应用程序,我想让其他人使用它.

但我很害怕:用户是否有可能从应用程序中获取变量值(密码)?

假设密码值为"myPass".它的二进制是:

01101101 01111001 01010000 01100001 01110011 01110011

应用程序二进制文件中是否包含此序列?

java compilation

8
推荐指数
1
解决办法
93
查看次数

在java中取消String是一个好习惯

我将普通密码作为字符串存储在内存中时出现问题.根据该参考文献,由于字符串是不可变的,因此存在使用字符串数据类型存储在内存中的敏感数据的漏洞.

https://www.geeksforgeeks.org/use-char-array-string-storing-passwords-java/

为什么char []比字符串更适合密码?

我可以通过使字符串变量无效而不是使用char数组或字符串缓冲区/构建器来克服此安全问题.

例如:String password ="password"; password = null;

java string

8
推荐指数
1
解决办法
602
查看次数

抛出NoSuchAlgorithException的Java SSL代码

我正在开发一个我想要添加SSL的项目,所以我创建了一个简单的客户端/服务器测试实现,看看它是否有效,我得到一个NoSuchAlgorithmException.以下是我抛出异常的服务器代码:

import java.io.*;
import java.net.*;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertificateException;

import javax.net.ssl.*;

public class SslServer
{
    private static final int PORT = 5555;

    public static void main(String[] args)
    {
        SecureRandom sr = new SecureRandom();
        sr.nextInt();

        try {
            //client.public is the keystore file that holds the client's public key (created with keytool)
            KeyStore clientKeyStore = KeyStore.getInstance("JKS");
            clientKeyStore.load(new FileInputStream("client.public"), "clientpublicpw".toCharArray());

            //server.private is the key pair for the server (created with keytool)
            KeyStore serverKeyStore …
Run Code Online (Sandbox Code Playgroud)

java ssl

7
推荐指数
1
解决办法
3万
查看次数

使用JOptionPane隐藏数据

如何使用JOption窗格的showInputDialog隐藏字符.例如:JOptionPane.showInputDialog("输入您的姓名:").

我想在用户提供他的名字时隐藏字符.我正处于申请中间.如果我可以隐藏这些角色,我的工作就完成了.我不想使用JPasswordField,因为它需要一个表单来保存该标签(JPasswordField).

java swing

7
推荐指数
1
解决办法
5034
查看次数

为什么PasswordField在Vaadin中使用String而不是char []?

字符串容易受到密码值的影响.我注意到Vaadin PasswordField操纵密码String.

以下是默认构造函数PasswordField,

public PasswordField() {
  setValue("");
}
Run Code Online (Sandbox Code Playgroud)

我的问题:

  • PasswordField在Vaadin 使用是否安全?
  • 什么内部API可以确保密码的安全性?

java vaadin vaadin7

7
推荐指数
1
解决办法
657
查看次数

窃取垃圾收集的东西有多容易?

为什么getText()在JPasswordField中被弃用了?

根据上述问题的答案,我理解的是创建一个String包含密码的对象是一种安全威胁,因为它可能会在内存中保留一段时间而且是不可变的.

所以我想知道,

  • 检索一直挂在内存中的东西,没有引用或遗漏垃圾收集是多么容易?

  • 你是怎么做到的?


编辑

由于问题已经结束,请善意通过添加评论来分享您的知识,如果您认为将来可能会得到有趣的答案,请考虑重新打开问题.:)

java memory security string garbage-collection

7
推荐指数
1
解决办法
162
查看次数

带动作命令的JPasswordField安全性

JPasswordField在我的程序中使用了一个.当我问getPassword(),我得到一个char[]数组.但是,当我添加ActionListenerJPasswordField,问getActionCommand(),我得到的密码作为String.此密码是否在事件对象中保存为String这不是一个安全问题吗?

java security swing jpasswordfield

6
推荐指数
1
解决办法
295
查看次数

用户可以使用char []而不是Servlet中的字符串来存储密码吗?

我阅读了几篇关于安全性的文章和帖子(注意 在Web应用程序中将输入密码与存储的哈希密码进行比较,或者为什么char []首选字符串用于密码?

由于从请求中检索参数值使用返回String的request.getParameter("passwordFieldName"),是否有任何选项可以从请求中检索参数作为char []?

java security passwords servlets

6
推荐指数
1
解决办法
983
查看次数

检测硬编码密码

我一直在尝试检测源代码文件中的硬编码密码.

目前,我正在检查变量赋值和比较标识符,其子字符串与password,pswd匹配.

但它导致了许多误报,例如在这种情况下(从配置文件中读取密码)

String PASSWORD_KEY = "server.password";
String password = prop.getProperty(PASSWORD_KEY);
Run Code Online (Sandbox Code Playgroud)

我可以标出一些子字符串,如Key,location,path,我可以跳过错误生成但除此之外,我想不出更好的方法.

所有建议表示赞赏.

java security passwords hardcoded sonarqube

6
推荐指数
1
解决办法
1264
查看次数

Java敏感数据:char [] vs String?有什么意义?

我们已经知道使用这个建议/做法char[]而不是String敏感数据.这有多种原因.一种是在不再需要敏感数据后立即清理它们:

char[] passwd = passwordProvider.getKeyStorePassword();
KeyStore keystore = KeyStore.getInstance("JKS");

// TODO: Create the input stream;
keystore.load(inputstream, passwd);

System.arraycopy(new char[passwd.length], 0, passwd, 0, passwd.length);

// Please continue...
Run Code Online (Sandbox Code Playgroud)

现在的问题是:char[]当敏感数据最初作为String价值出现时,它(即使用)是否有意义(特别是上面提到的那一点)?例如:

char[] passwd = passwordProvider.getKeyStorePassword().toCharArray();
KeyStore keystore = KeyStore.getInstance("JKS");

// TODO: using the passwd, load the keystore;

System.arraycopy(new char[passwd.length], 0, passwd, 0, passwd.length);

// Please continue...
Run Code Online (Sandbox Code Playgroud)

提前致谢.

更新2:我将重新解释这个问题:在这个特定的环境中(忘记将来或其他任何事情的变化),清除"char数组的内容"这一行是否有用?

UPDATE1:它不是重复的为什么char []首选字符串的密码? 我知道故事是什么.我在这个特定的背景下问,它还有意义吗?

java

6
推荐指数
1
解决办法
156
查看次数