相关疑难解决方法(0)

Java-PBKDF2,HMACSHA256作为PRF

我已经完成了为项目创建Login API的任务,我应该使用PBACSD25和HMACSHA256作为PRF.使用MD5对纯文本密码进行哈希处理,然后将其输入PBKDF2以生成派生密钥.问题是,我无法获得与项目文档告诉我的相同的输出.

这是Java中的PBKDF2实现:

public class PBKDF2
{
    public static byte[] deriveKey( byte[] password, byte[] salt, int iterationCount, int dkLen )
        throws java.security.NoSuchAlgorithmException, java.security.InvalidKeyException
    {
        SecretKeySpec keyspec = new SecretKeySpec( password, "HmacSHA256" );
        Mac prf = Mac.getInstance( "HmacSHA256" );
        prf.init( keyspec );

        // Note: hLen, dkLen, l, r, T, F, etc. are horrible names for
        //       variables and functions in this day and age, but they
        //       reflect the terse symbols used in RFC 2898 to describe
        //       the PBKDF2 algorithm, …
Run Code Online (Sandbox Code Playgroud)

authentication hash md5 cryptography pbkdf2

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

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

我有一个像这样的字符串:

init_thread = "2b11020000ed"
Run Code Online (Sandbox Code Playgroud)

我必须通过蓝牙发送这个字符串,我这样做:

byte[] init = init_thread.getBytes();
GlobalVar.mTransmission.write(init);
Run Code Online (Sandbox Code Playgroud)

我需要的是init_thread在将字符串转换为字节之前定义字符串是十六进制字符串,因为如果我这样做,它就会出错:

现在做什么= 2(1字节),b(1字节),1(1字节),1(1字节)......

必须做什么= 2b(1byte),11(1byte),02(1byte)......

string android hex byte

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

对于大数字,SHA256哈希在Android和iOS上的结果不同

我正在尝试哈希一个BigInteger/BigNum,我在Android/iOS上得到了不同的结果.我需要获得相同的Hash结果,以便两个应用程序按照SRP协议工作.仔细观察它对正数很好,但不适用于负数(第一个半数大于7).不确定哪一个是正确的,哪一个要调整以匹配另一个.

安卓:

    void hashBigInteger(String s) {
    try {
        BigInteger a = new BigInteger(s, 16);
        MessageDigest sha = MessageDigest.getInstance("SHA-256");
        byte[] b = a.toByteArray();
        sha.update(b, 0, b.length);
        byte[] digest = sha.digest();
        BigInteger d = new BigInteger(digest);
        Log.d("HASH", "H = " + d.toString(16));
    } catch (NoSuchAlgorithmException e) {
        throw new UnsupportedOperationException(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

iOS版:

void hashBigNum(unsigned char *c) {
    BIGNUM *n = BN_new();
    BN_hex2bn(&n, c);
    unsigned char   buff[ SHA256_DIGEST_LENGTH ];
    int             len  = BN_num_bytes(n);
    unsigned char * bin    = (unsigned char *) malloc( …
Run Code Online (Sandbox Code Playgroud)

hash android biginteger bignum ios

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

将十六进制字节转换为实际字节

我有一个像这样的字节写的文件

\r\x00\x00\x00\xd0{"a": "test"}
Run Code Online (Sandbox Code Playgroud)

其中包含以下字节

[13, 0, 0, 0, -48, 123, 34, 97, 34, 58, 32, 34, 116, 101, 115, 116, 34, 125]
Run Code Online (Sandbox Code Playgroud)

当这个文件被读入Java时,我得到了所有的东西

\\r\\x00\\x00\\x00\\xd0{"a": "test"}
Run Code Online (Sandbox Code Playgroud)

当我.getBytes()在这个字符串上做的时候,我得到了

[92, 114, 92, 120, 48, 48, 92, 120, 48, 48, 92, 120, 48, 48, 92, 120, 100, 48, 123, 34, 97, 34, 58, 32, 34, 116, 101, 115, 116, 34, 125]
Run Code Online (Sandbox Code Playgroud)

我必须将字符串转换为有效字节,遗憾的是我无法更改文件的读取方式.我知道在Python中,你打开一个'rb'模式的文件,你很高兴.如果java具有该能力,我就无法使用它.

简而言之,如何将字符串Java读取转换为写入文件的原始字节数组?

很抱歉,如果这个问题很简单,那么在Java方面我是如此的绿色.

编辑:所以我认为我的问题与提议的"重复问题"链接不同.它没有取得java字符串中的每个字面值并将其转换回字节.java中的字符串已被读者转义. \x00现在是\\x00哪个字节值不一样.所以我想我需要某种方法来取消字符串?

在十六进制编辑器中查看的文件

0000000: 5c72 5c78 3030 5c78 3030 5c78 3030 5c78  \r\x00\x00\x00\x …
Run Code Online (Sandbox Code Playgroud)

java

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

Java 相当于 php pack('H*', str)

编辑

我改$checksum = md5($someString+$bkey);$checksum = md5($someString.$bkey);

我需要在 Java 中执行以下操作:

$hexString = '90aa';#sample value
$bkey = pack('H*',$hexString);
$someString='qwe';#sample value
$checksum  = md5($someString.$bkey);
echo $checksum;
Run Code Online (Sandbox Code Playgroud)

我无法在 Java 中将 hexString 转换为 bkey 以获得与 php 脚本相同的结果。除了bkey一切正常。

如果我删除bkey然后:

PHP:

$someString='qwe';#sample value
$checksum  = md5($someString);
echo $checksum;
Run Code Online (Sandbox Code Playgroud)

结果: 76d80224611fc919a5d54f0ff9fba446

爪哇:

String someString = "qwe";
        MessageDigest messageDigest = MessageDigest.getInstance("MD5");
        String checksum = new BigInteger(1, messageDigest.digest(someString
                .getBytes())).toString(16);
        System.out.println(checksum);
Run Code Online (Sandbox Code Playgroud)

结果: 76d80224611fc919a5d54f0ff9fba446

如您所见,它有效

bkey

PHP:

$hexString = '90aa';#sample value
$bkey = …
Run Code Online (Sandbox Code Playgroud)

php java string

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

如何在 Java 中执行 MySQL UNHEX() 函数

我正在尝试从字符串中获取 Java 中的 MySQL 密码哈希,所以我用谷歌搜索了一下,发现了 MySQL 中的 PASSWORD() 是如何工作的:

SELECT SHA1(UNHEX(SHA1('test')));
Run Code Online (Sandbox Code Playgroud)

给出相同的结果

SELECT PASSWORD('test');
Run Code Online (Sandbox Code Playgroud)

有了这个我继续。

我写了一个将字符串转换为 SHA1 Hash 的方法,它完美地工作(测试了几个不同的字符串,得到与 MySQL 中的 SHA1(str) 相同的结果)

接下来要做的是 UNHEX() 方法。我现在卡住了。

我目前的方法:

public static String toMySQLPasswordHash(String str)
{
    String hash1 = toSHA1Hash(str);
    String unhexedHash1 = new String(DatatypeConverter.parseHexBinary(hash1));
    String hash2 = toSHA1Hash(unhexedHash1);

    String passwordHash = "*" + hash2.toUpperCase();


    return passwordHash;
}
Run Code Online (Sandbox Code Playgroud)

我的“toSHA1Hash”方法:

public static String toSHA1Hash(String str)
{
    MessageDigest md = null;

    try
    {
        md = MessageDigest.getInstance("SHA-1");
    }
    catch (NoSuchAlgorithmException e)
    {
        Logger.WriteLog(e.toString());
    }

    if (md …
Run Code Online (Sandbox Code Playgroud)

java mysql passwords hash

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

如何在android BLE中将“0xFF”写为特征值?

我正在尝试使用 BluetoothGattCharacteristic 方法 setValue(..) 在香水分配器设备中写入十六进制值 0xFF 。我在回调方法 onCharacteristicWrite() 中获得成功状态代码 0 但设备不执行任何操作,理想情况下它应该发出香味.

下面是我写入特性的示例代码

private void writeCharacteristic(CallbackContext callbackContext, UUID serviceUUID, UUID characteristicUUID, byte[] data, int writeType) {

    boolean success = false;

    if (gatt == null) {
        callbackContext.error("BluetoothGatt is null");
        return;
    }
    BluetoothGattService service = gatt.getService(serviceUUID);
    BluetoothGattCharacteristic characteristic = findWritableCharacteristic(service, characteristicUUID, writeType);
            if (characteristic == null) {
        callbackContext.error("Characteristic " + characteristicUUID + " not found.");
    } else {
        int data2=0xFF;
        characteristic.setValue(data2, BluetoothGattCharacteristic.FORMAT_UINT16, 0);
        characteristic.setWriteType(BluetoothGattCharacteristic.WRITE_TYPE_NO_RESPONSE);
        writeCallback = callbackContext;   
        if (gatt.writeCharacteristic(characteristic)) {
            success = true; …
Run Code Online (Sandbox Code Playgroud)

android

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

以字符串格式获取MQ messageId

我正在使用 IBM 的 mq 库从 MQ 队列读取消息。现在我需要检索消息的 messageid。我现在它在名称 messageId 下的消息标题中。但这会返回一个字节 []。现在我需要将其更改为可读字符串。

如何将 messageId 从 byte[] 转换为 string?

我尝试了几次转换,但没有一个有效:

new String(theMessage.messageId)
new String(theMessage.messageId, "UTF-8")
new String(theMessage.messageId, "UTF-16")
theMessage.messageId.toString()
Run Code Online (Sandbox Code Playgroud)

java ibm-mq

4
推荐指数
2
解决办法
5995
查看次数

Java - 字符串中的字节数组

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

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

java arrays hex byte

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

如何将八位字节字符串转换为可读字符串

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

例如,我得到一个字节串如下:3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d38223f3e3c53 6f6170456e763a456e76656c6f706520786d6c6e733a536f6170456e763d22687474703a2f2f7363 68656d61732e786d6c736f61702e6f72672f736f61702f656e76656c6f70652f223e3c536f617045 6e763a48656164657220786d6c6e733a7773613d22687474703a2f2f7777772e77332e6f72672f32 3030352f30382f61646472657373696e67223e3c7773613a46726f6d3e3c7773613a416464726573 733e43484e594442473c2f7773613a416464726573733e3c2f7773613a46726f6d3e3c7773613a54 6f3e434352433c2f7773613a546f3e3c7773613a416374696f6e3e687474703a2f2f636372632e73 6572766963652e62616e6b636f6d6d2e636f6d2f6162737472616374696f6e2f61746f6d69632f74 6563686e6963616c2e506572736f6e616c4372656469745265706f7274536572762f4661756c743c 2f7773613a416374696f6e3e3c7773613a4d65737361676549443e75726e3a757569643a30303031

而且我知道底层文本是UTF-8编码,那么谁能提供一些方法将这些八位位组转换为可读字符串?

java

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

标签 统计

java ×6

android ×3

hash ×3

byte ×2

hex ×2

string ×2

arrays ×1

authentication ×1

biginteger ×1

bignum ×1

cryptography ×1

ibm-mq ×1

ios ×1

md5 ×1

mysql ×1

passwords ×1

pbkdf2 ×1

php ×1