例如,我有一个字符串"DEADBEEF".如何将其转换为byte [] bytes = {0xDE,0xAD,0xBE,0xEF}?
我有一个十六进制转储文件,这是一个有效的*.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) 我想使用此密钥 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) 一个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) 在过去的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) 我有这个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) 背景: 我正在处理的应用程序应该脱机工作.我应该使用密码作为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执行的不同步骤
我有来自CryptoJS的加密AES-256字符串和密码短语.我需要用Java解密它,但无法弄清楚如何做到这一点.您似乎需要IV,密钥和盐来解密,并且在CryptoJS主页中,加密数据已经包含所有这些,并且CryptoJS可以某种方式将它们从加密输入中解析出来.
谁知道怎么做?我已经看到了很多关于CryptoJS的例子 - Java加密/解密但是大多数都使用硬编码的IV /密钥,或者只是将密码/密钥从cryptoJS端发送到Java端.我所拥有的只是一个密码,就像这个网站所做的那样!
我正在读取一个存储二进制文件的文件。在 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做同样的解码,我们有类似的东西吗?
我正在开展 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 ×9
encryption ×3
cryptojs ×2
hex ×2
aes ×1
arrays ×1
base64 ×1
binaryfiles ×1
byte ×1
cryptography ×1
des ×1
exception ×1
hmac ×1
javascript ×1
md5 ×1
php ×1
python ×1
security ×1
sha256 ×1
unzip ×1