标签: java-security

锯齿无效的批次或签名

我最近开始使用Hyperledger Sawtooth进行播放,并且无法在java上提交事务,而python代码似乎没问题.

我已经在这里编写了基于api文档的python代码,然后尝试在java中编写一个.下面是java中的代码

import com.google.protobuf.ByteString;
import com.mashape.unirest.http.Unirest;
import sawtooth.sdk.processor.Utils;
import sawtooth.sdk.protobuf.*;

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.Signature;
import java.security.spec.ECGenParameterSpec;

public class BatchSender {

    public static void main(String[] args) throws Exception{


        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("EC");
        ECGenParameterSpec parameterSpec = new ECGenParameterSpec("secp256k1");

        keyPairGenerator.initialize(parameterSpec);

        KeyPair keyPair = keyPairGenerator.generateKeyPair();
        Signature ecdsaSign = Signature.getInstance("SHA256withECDSA");

        ecdsaSign.initSign(keyPair.getPrivate());


        byte[] publicKeyBytes = keyPair.getPublic().getEncoded();
        String publicKeyHex = Utils.hash512(publicKeyBytes);

        ByteString publicKeyByteString = ByteString.copyFrom(new String(publicKeyBytes),"UTF-8");


        String payload = "{'key':1, 'value':'value comes here'}";
        String payloadBytes = Utils.hash512(payload.getBytes());

        ByteString payloadByteString  = …
Run Code Online (Sandbox Code Playgroud)

java blockchain java-security hyperledger hyperledger-sawtooth

4
推荐指数
1
解决办法
631
查看次数

如何防止System.getProperty("user.name")被欺骗

我正在java中构建一个桌面应用程序,我需要登录的用户名.我System.getProperty("user.name")用来获取用户名.

但这可以通过使用来欺骗

Properties p = System.getProperties();
    p.put("user.name", "XYZ");
    System.setProperties(p);
Run Code Online (Sandbox Code Playgroud)

或者

-Duser.name=someothername
Run Code Online (Sandbox Code Playgroud)

如何防止此欺骗或任何替代方法以安全的方式登录用户名.桌面应用程序独立于平台.

java java-security

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

如何在Windows中打开.ks文件?

我有一个需要打开的key.ks文件.有人可以建议如何在Windows中打开此文件.我可以使用Keytool命令吗?

java keystore java-security

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

toDerInputStream 拒绝标签类型 0 - 无法从密钥库读取密钥

在我的 Android 应用程序中,我有一个名为 的密钥库文件keystore.p12,它位于/data/data/com.company.myapp/files. 我拉了这个特定的文件,现在我想检索存储在其中的密钥。

我用这样的keytool试了一下:

>keytool.exe -list -keystore C:\Users\user\Desktop\keystore.p12 -storepass letmein -storetype PKCS12 -v
Run Code Online (Sandbox Code Playgroud)

不幸的是,我收到以下错误:

keytool error: java.io.IOException: toDerInputStream rejects tag type 0
java.io.IOException: toDerInputStream rejects tag type 0
        at sun.security.util.DerValue.toDerInputStream(DerValue.java:874)
        at sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:1915)
        at java.security.KeyStore.load(KeyStore.java:1445)
        at sun.security.tools.keytool.Main.doCommands(Main.java:795)
        at sun.security.tools.keytool.Main.run(Main.java:343)
        at sun.security.tools.keytool.Main.main(Main.java:336)
Run Code Online (Sandbox Code Playgroud)

我用 Java 尝试了同样的事情,但我遇到了同样的异常:

public static void main(String[] args) {
        try {
            FileInputStream is = new FileInputStream("C:\\Users\\user\\Desktop\\keystore.p12");
            KeyStore keystore = KeyStore.getInstance("pkcs12");
            keystore.load(is, "letmein".toCharArray());
            is.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
Run Code Online (Sandbox Code Playgroud)

知道如何解决这个问题吗?

java android keytool java-security

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

将信任链导入密钥对或将其导入密钥库或两者都导入

我们正在尝试为 Tomcat 服务器获取有效的 SSL,并且我们正在使用 KeyTool 来管理密钥库

....但我认为任何具有安全背景的人都可以提供帮助!


  1. 我创建一个密钥存储
  2. 在其中生成公钥和私钥对。
  3. 生成 CSR。
  4. 提交CSR并获得证书信任链
  5. 我导入证书
  6. 我必须导入Trust Chain

第6组是我的问题。我有两个选择:

将证书附加到密钥对(名为 tomcat),如下: 附加证书

或者将 CA 导入到密钥库。如下

将 CA 导入密钥库

我应该两者都做吗?如果第一个选项(将证书附加到密钥对)就足够了,那么为什么有人需要将证书添加到密钥存储?

java ssl certificate keystore java-security

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

如何从Java中的SSH RSA公钥计算指纹?

作为标题,如何从Java中的SSH RSA公钥计算指纹?我从sample.pub获得了一个rsaPublicKey对象,并使用库Apache Commons Codec计算了指纹, DigestUtils.sha256Hex(rsaPublicKey.getEncoded()); 但是使用ssh-keygen命令 ssh-keygen -E sha256 -lf sample.pub sample.pub 时却得到了不同的指纹 ,如下所示 ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAsuVPKUpLYSCNVIHD+e6u81IUznkDoiOvn/t56DRcutRc4OrNsZZ+Lmq49T4JCxUSmaT8PeLGS/IC946CNQzFwMh++sVoc19UUkZtRaDgiYn+HkYk8VW4IFI1dKfXomKSbX/lB+ohzLzXLVP2/UJgfBmdaE10k+6b+/Yd8YGXIeS8/Z9zToHPo0ORNSGIolgq3xMXUtfAOK/0KC6IFc/FuvuOSAG1UWup91bcm5GSXv4BWWjgFtOxCLIknYjsDah4qfrP8Olp5eUDhn/65xRcZsmRXoYe1ylhlSjJoPDFWXVs9npwqQmi3JaZtgg7xJxMu1ZcdpYxoj280zM9/6w1Lw==

java ssh-keys public-key rsa-key-fingerprint java-security

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

在没有库的情况下用Java读取PKCS#1或SPKI公钥

我需要使用公共密钥来验证Java中的某些数据,但是我似乎无法以无需第三方插件就可以使用Java的方式来格式化密钥。

我正在使用Node.js的crypto库生成密钥,该库为我提供了PKCS#1或选项SPKI,以及.pem或.der文件格式。

我听说Java不支持PKCS#1开箱即用,并且StackOverflow上的几乎所有其他答案都建议使用BouncyCastle或类似工具,但就我而言,我正在编写一个SDK,并且根本负担不起使用库只是阅读此公钥。

因此,我目前正在读取.der格式的密钥,因为它省去了剥离PEM标头并从base-64解码密钥的麻烦。运行此命令时,出现错误:

java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: error:0c0000be:ASN.1 encoding routines:OPENSSL_internal:WRONG_TAG
Run Code Online (Sandbox Code Playgroud)

这就是我所拥有的(对不起,它在Kotlin,而不是标题所暗示的Java)

// Here's a key for convenience
val key = Base64.getDecoder().decode("MFUCTgF/uLsPBS13Gy7C3dPpiDF6SYCLUyyl6CFqPtZT1h5bwKR9EDFLQjG/kMiwkRMcmEeaLKe5qdj9W/FfFitwRAm/8F53pQw2UETKQI2b2wIDAQAB");

val keySpec = X509EncodedKeySpec(key)
val keyFactory = KeyFactory.getInstance("RSA")
val publicKey = keyFactory.generatePublic(keySpec) // error thrown here

val cipher = Cipher.getInstance("RSA/NONE/PKCS1Padding")
cipher.init(Cipher.DECRYPT_MODE, publicKey)
Run Code Online (Sandbox Code Playgroud)

目前,我最好的想法是在Node.js端安装一个库,以减少将问题导出为PKCS#8的麻烦,但我想我首先要检查是否丢失了任何东西。

java encryption public-key-encryption java-security

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

Java Server 的 Swift RSA 加密公钥失败

我想创建公共密钥的base64RSA Private key使用Security框架。这是片段。

let tag = "com.example.keys.mykey"
public extension SecKey {
    static func generateBase64Encoded2048BitRSAKey() throws -> (private: String, public: String) {
        let type = kSecAttrKeyTypeRSA
        let attributes: [String: Any] =
            [kSecAttrKeyType as String: type,
             kSecAttrKeySizeInBits as String: 2048
        ]

        var error: Unmanaged<CFError>?
        guard let key = SecKeyCreateRandomKey(attributes as CFDictionary, &error),
            let data = SecKeyCopyExternalRepresentation(key, &error) as Data?,
            let publicKey = SecKeyCopyPublicKey(key),
            let publicKeyData = SecKeyCopyExternalRepresentation(publicKey, &error) as Data? else {
                throw error!.takeRetainedValue() as Error …
Run Code Online (Sandbox Code Playgroud)

rsa swift java-security

3
推荐指数
2
解决办法
1775
查看次数

如何使用具有相应别名的java代码仅在密钥库中存储公钥?

我创建了密钥库,我只想在密钥库中存储publickey,并且不想存储私钥.因为私钥将在客户端设备中,并且他将使用rest API共享公钥.

另外,我应该如何在一个keystore中使用不同的别名保留多个公钥

如果某人有示例代码或示例链接,那么对我来说将非常有帮助.

java-security

2
推荐指数
1
解决办法
3399
查看次数

如何在 Java 中更改 KeyStore 文件的密码?

我正在使用 javaKeyStore来存储用户安全信息并使用密码锁定(加密)密钥存储并在需要时使用密码检索信息,这工作正常。

但我不知道如何更改同一个 keyStore 文件的密码

我正在使用使用KeyStore.load(InputStream,Password)用户密码访问密钥库keyStore.store(Keystore,password)并将值写入密钥库的方法。

有没有办法更改keyStore文件的密码。我已经检查了此处提供的 api 文档:http : //docs.oracle.com/javase/7/docs/api/java/security/KeyStore.html

java android keystore android-keystore java-security

2
推荐指数
1
解决办法
863
查看次数

generateSecureRandom() 的高性能方法

该方法generateSecureRandom()经常被不同的线程调用,我也使用此令牌来生成数据库 ID。

我是否应该将字段random和放在encoder类级别上以使其更有效(线程本地?)?

如果放在random或在类级别上,当一个线程正在使用它时,其他线程的encoder访问是否会被锁定?SecureRandom我不想创建 SecureRandom 实例池,而是使用线程本地。

public final RandomGenerator{

  public static String generateSecureRandom() {

      // field will be created on each method call
      final SecureRandom random = new SecureRandom();

      // field will be created on each method call
      final Base64.Encoder encoder = Base64.getUrlEncoder().withoutPadding();


      byte[] buffer = new byte[20];
      random.nextBytes(buffer);
      return encoder.encodeToString(buffer);
   }
}
Run Code Online (Sandbox Code Playgroud)

我应该将字段randomandencoder放在方法级别还是类级别?

java java-security

2
推荐指数
1
解决办法
354
查看次数

MD5 算法在 java 中工作,即使在 $JAVA_HOME/lib/security/java.security 中禁用它之后也是如此

我已禁用 MD5 算法,使用在$JAVA_HOME/lib/security/java.security文件中添加以下内容。但我仍然能够运行使用 MD5 算法的代码。

jdk.certpath.disabledAlgorithms=MD2, MD5, SHA1 jdkCA & usage TLSServer
jdk.jar.disabledAlgorithms=MD2, MD5, RSA keySize < 1024
jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, DH keySize < 1024
Run Code Online (Sandbox Code Playgroud)

但我仍然可以运行以下使用 MD5 的代码

import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5 {
    public static String getMd5(String input)
    {
        try {

            // Static getInstance method is called with hashing MD5
            MessageDigest md = MessageDigest.getInstance("MD5");

            // digest() method is called to calculate message digest
            // of an input digest() return array of byte …
Run Code Online (Sandbox Code Playgroud)

java md5 fips java-security

2
推荐指数
1
解决办法
1526
查看次数

在android中将byte[]转换为十六进制字符串

我正在尝试将 byte[] 转换为十六进制字符串,并将相同的十六进制字符串转换为 android 中的 byte[] ,数据不匹配。

前任 :

收到字节[]数据:[B@b39c86a

转换后的十六进制字符串:8be897cc3c4d9e5dd6a6bbd106d8e8d487691b56

当我解码十六进制字符串时,我得到[B@ea6d15b,但它应该是[B@b39c86a

我正在使用下面的代码进行转换。

public String byte2hex(byte[] a) {
        /*StringBuilder sb = new StringBuilder(a.length * 2);

        for (byte b : a)
            sb.append(String.format("%02x", b & 0xff));
        return sb.toString();*/

        String hexString = "";

        for(int i = 0; i < a.length; i++){
            String thisByte = "".format("%x", a[i]);
            hexString += thisByte;
        }

        return hexString;

    }
    public static byte[] hexStringToByteArray(String s) {
       /* int len = s.length();
        byte[] data = new …
Run Code Online (Sandbox Code Playgroud)

java encryption android java-security android-security

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