相关疑难解决方法(0)

Java - 字符串中的字节数组

可能重复:
使用Java将十六进制转储的字符串表示形式转换为字节数组?

例如,我有一个字符串"DEADBEEF".如何将其转换为byte [] bytes = {0xDE,0xAD,0xBE,0xEF}?

java arrays hex byte

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

Inflater在有效输入上抛出"错误的标题检查"异常

我有一个十六进制转储文件,这是一个有效的*.zip文件(我可以用Hxd转换它,然后用Total Commander打开).但是当我使用以下方法从java中执行此操作时:

要从十六进制转换为字节数组:

    int size = hexContent.length() / 2;
    byte[] byteArray = new byte[size];
    for (int i = 0; i < hexContent.length() - 1; i += 2) {
        //grab the hex in pairs convert to character
        byteArray[i / 2] = (byte) (Integer.parseInt(hexContent.substring(i, (i + 2)), 16));
    }
    return byteArray;
Run Code Online (Sandbox Code Playgroud)

要解压缩:

    Inflater inflater = new Inflater();
    inflater.setInput(data, 0, data.length);
    byte[] decompressedData = new byte[data.length];
    inflater.inflate(decompressedData);
    return decompressedData;
Run Code Online (Sandbox Code Playgroud)

inflater.infalte()方法抛出异常.这可能是一个问题,java使用有符号字节?

更新#1:

解压缩方法是错误的,因为它使用输入字节数组长度az输出数组长度,这显然是错误的,所以我修改了它:

public static byte[] decompress(byte[] data) {
    Inflater inflater = new Inflater(); …
Run Code Online (Sandbox Code Playgroud)

java unzip

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

加密密钥大小 DES Java

我想使用此密钥 C6864E7696C686 和 DES 算法加密挑战(如 162236fe0bec620827958c8fdf7e4bc7 )。

这是我的代码:

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.xml.bind.DatatypeConverter;
import javax.crypto.spec.DESKeySpec;


def data = prev.getResponseData();
String challenge = javax.xml.bind.DatatypeConverter.printHexBinary(data);
final String strPassPhrase = "C6864E7696C686";

String param = challenge;
System.out.println("Text : " + param);

SecretKeyFactory factory = SecretKeyFactory.getInstance("DES");
SecretKey key = factory.generateSecret(new   DESKeySpec(hexStringToByteArray(strPassPhrase)));
Cipher cipher = Cipher.getInstance("DES");

cipher.init(Cipher.ENCRYPT_MODE, key);
String str = DatatypeConverter.printBase64Binary(cipher.doFinal(param.getBytes()));
System.out.println("Text Encryted : " + str);
cipher.init(Cipher.DECRYPT_MODE, key);
String str2 = new String(cipher.doFinal(DatatypeConverter.parseBase64Binary(str)));
System.out.println("Text Decryted : " + str2);
Run Code Online (Sandbox Code Playgroud)

但我得到这个例外:

java.security.InvalidKeyException: …
Run Code Online (Sandbox Code Playgroud)

java encryption des exception

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

将 UUID 转换为十六进制字符串,反之亦然

一个UUID在“b2f0da40ec2c11e00000242d50cf1fbf”已转化的形式(参见下面的代码段),成为6232663064613430656332633131653030303030323432643530636631666266.我想代码反向例程的十六进制字符串,并让它回到原来的格式,如“b2f0 ......”但很难做到这一点,有什么帮助吗?

    byte[] bytes = uuid.getBytes("UTF-8");

    StringBuilder hex = new StringBuilder(bytes.length* 2);
    Formatter fmt = new Formatter(hex);

    for (byte b : bytes)
        fmt.format("%x", b);
Run Code Online (Sandbox Code Playgroud)

java

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

字符串到字节数组,然后到Java中的MD5

在过去的5个小时里,我试图做一些应该非常简单的事情,并在C#中用10分钟完成,但是没有运气的Java.我有一个32 UpperCase和Numeric String(A-Z0-9),我需要将这个String转换为Dec,然后md5它.我的问题是我没有未编译的字节所以我不能md5我的数组:\

这是我在python中需要做的事情:

salt = words[1].decode("hex")
passwordHash = generatePasswordHash(salt, pw)
generatePasswordHash(salt, password):
    m = md5.new()
    m.update(salt)
    m.update(password)
    return m.digest()
Run Code Online (Sandbox Code Playgroud)

这里是C#:

public static string GeneratePasswordHash(byte[] a_bSalt, string strData) {
    MD5 md5Hasher = MD5.Create();

    byte[] a_bCombined = new byte[a_bSalt.Length + strData.Length];
    a_bSalt.CopyTo(a_bCombined, 0);
    Encoding.Default.GetBytes(strData).CopyTo(a_bCombined, a_bSalt.Length);

    byte[] a_bHash = md5Hasher.ComputeHash(a_bCombined);

    StringBuilder sbStringifyHash = new StringBuilder();
    for (int i = 0; i < a_bHash.Length; i++) {
        sbStringifyHash.Append(a_bHash[i].ToString("X2"));
    }

    return sbStringifyHash.ToString();
}

protected byte[] HashToByteArray(string strHexString) {
    byte[] a_bReturn = new byte[strHexString.Length / 2]; …
Run Code Online (Sandbox Code Playgroud)

java hex md5

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

java hmac/sha512代

我有这个PHP代码生成一个HMAC(而不是一个简单的消息摘要):

<?php 
$key = "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF";
$binkey = pack("H*", $key); 
echo strtoupper(hash_hmac('sha512', "ABC", $binkey)); 
?>
Run Code Online (Sandbox Code Playgroud)

并与ABC输入输出是:

100A6A016A4B21AE120851D51C93B293D95B7D8A44B16ACBEFC2D1C9DF02B6F54FA3C2D6802E52FED5DF8652DDD244788A204682D2D1CE861FDA4E67F2792643
Run Code Online (Sandbox Code Playgroud)

我需要在java中克隆它.

所以这是我目前的java克隆:

private String generateHMAC( String datas )
    {

        //                final Charset asciiCs = Charset.forName( "utf-8" );
        Mac mac;
        String result = "";
        try
        {
            byte[] bytesKey = PayboxConstants.KEY.getBytes( );
            final SecretKeySpec secretKey = new SecretKeySpec( bytesKey, "HmacSHA512" );
            mac = Mac.getInstance( "HmacSHA512" );
            mac.init( secretKey );
            final byte[] macData = mac.doFinal( datas.getBytes( ) );
            byte[] hex = new Hex( …
Run Code Online (Sandbox Code Playgroud)

php java sha256 hmac

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

在使用密码加密消息时,crypto-js内部使用的AES参数和步骤是什么?

背景: 我正在处理的应用程序应该脱机工作.我应该使用密码作为Java服务器端的密钥加密一些文本数据.加密数据传递到HTML5页面,在客户端使用crypto-js库,应解密服务器加密数据.

我的问题: 为了加密我的消息,客户端可以使用crypt-js解密它(使用用户输入的密码),我需要知道加密消息时crypto-js所期望的确切步骤.

我需要知道的是: 我有以下加密代码,它使用crypto-js在客户端加密消息.

var message = "my message text";
var password = "user password";
var encrypted = CryptoJS.AES.encrypt( message ,password );
console.log(encrypted.toString());
Run Code Online (Sandbox Code Playgroud)

我需要知道加密消息时CryptoJS使用的AES参数(不确定它们是什么,但听起来像:密钥大小(256),填充(pkcs5),模式(CBC),PBE算法(PBKDF2),盐(随机),迭代计数(100)).如果有人能证实这一点,那将是一个很大的帮助......过去几天我一直试图解开这个谜团?

我需要知道在加密消息时CryptoJS执行的不同步骤

javascript security encryption cryptojs

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

如何使用Java从CryptoJS解密加密的AES-256字符串?

我有来自CryptoJS的加密AES-256字符串和密码短语.我需要用Java解密它,但无法弄清楚如何做到这一点.您似乎需要IV,密钥和盐来解密,并且在CryptoJS主页中,加密数据已经包含所有这些,并且CryptoJS可以某种方式将它们从加密输入中解析出来.

谁知道怎么做?我已经看到了很多关于CryptoJS的例子 - Java加密/解密但是大多数都使用硬编码的IV /密钥,或者只是将密码/密钥从cryptoJS端发送到Java端.我所拥有的只是一个密码,就像这个网站所做的那样!

java encryption cryptography aes cryptojs

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

Java 相当于 struct.unpack('d', s.decode('hex'))[0]

我正在读取一个存储二进制文件的文件。在 python 中我可以轻松解码文件

>>> s = '0000000000A0A240'
>>> s.decode('hex')
'\x00\x00\x00\x00\x00\xa0\xa2@'
>>> import struct
>>> struct.unpack('d', s.decode('hex'))[0]
2384.0
Run Code Online (Sandbox Code Playgroud)

现在我想用Java做同样的解码,我们有类似的东西吗?

python java binaryfiles

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

Java将十六进制转换为Base64

我正在开展 Matasano CryptoChallenge,第一个任务是创建一个十六进制到 Base 64 的转换器。老实说,我不知道如何从这里继续。我的代码:

public class HexToBase64 {

public static void main(String[] args) {
//        String hex  = "49276d206b696c6c696e6720796f757220627261696e206c696b65206120706f69736f6e6f7573206d757368726f6f6d";
    String hex = "DA65A";
    convertHexTo64(hex);
}

public static String convertHexTo64(String hex) {
    //convert each letter in the hex string to a 4-digit binary string to create a binary representation of the hex string
    StringBuilder binary = new StringBuilder();
    for (int i = 0; i < hex.length(); i++) {
        int dec = Integer.parseInt(hex.charAt(i) + "", 16);
        StringBuilder bin = new …
Run Code Online (Sandbox Code Playgroud)

java base64

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