我最近开始使用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
我正在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)
如何防止此欺骗或任何替代方法以安全的方式登录用户名.桌面应用程序独立于平台.
我有一个需要打开的key.ks文件.有人可以建议如何在Windows中打开此文件.我可以使用Keytool命令吗?
在我的 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)
知道如何解决这个问题吗?
我们正在尝试为 Tomcat 服务器获取有效的 SSL,并且我们正在使用 KeyTool 来管理密钥库
....但我认为任何具有安全背景的人都可以提供帮助!
第6组是我的问题。我有两个选择:
或者将 CA 导入到密钥库。如下
我应该两者都做吗?如果第一个选项(将证书附加到密钥对)就足够了,那么为什么有人需要将证书添加到密钥存储?
作为标题,如何从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中的某些数据,但是我似乎无法以无需第三方插件就可以使用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的麻烦,但我想我首先要检查是否丢失了任何东西。
我想创建公共密钥的base64从RSA 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) 我创建了密钥库,我只想在密钥库中存储publickey,并且不想存储私钥.因为私钥将在客户端设备中,并且他将使用rest API共享公钥.
另外,我应该如何在一个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
该方法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放在方法级别还是类级别?
我已禁用 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) 我正在尝试将 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-security ×13
java ×11
android ×3
keystore ×3
encryption ×2
blockchain ×1
certificate ×1
fips ×1
hyperledger ×1
keytool ×1
md5 ×1
public-key ×1
rsa ×1
ssh-keys ×1
ssl ×1
swift ×1