You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Bash将十六进制编码文件转换为UTF-8?

Got it, let's break down how to decode your encrypted hex file step by step. Based on the partial encryption code you shared, I'll first fill in the gaps to show the complete encryption process, then provide the matching decryption solution.

Step 1: Full Encryption Context (For Reference)

Your original code uses AES-256-CBC, converts UTF-8 input to encrypted data, then likely converts that buffer to a hex string for storage. Here's the complete version of that encrypt function to give you full context:

const crypto = require('crypto');
const fs = require('fs').promises;
const algorithm = 'AES-256-CBC';

const encrypt = async (value, password, iv) => {
  // AES-256 requires a 32-byte key; here we derive it from a password using scrypt
  const key = crypto.scryptSync(password, 'salt', 32);
  const cipher = crypto.createCipheriv(algorithm, key, iv);
  
  let encrypted = cipher.update(value, 'utf8', 'hex');
  encrypted += cipher.final('hex');
  
  // Write the hex-encoded encrypted data to file
  await fs.writeFile('encrypted.hex', encrypted);
  return encrypted;
};

// Example usage (this is likely how you generated the file)
// encrypt('Your original UTF-8 content', 'your-secure-password', crypto.randomBytes(16));

Step 2: Decryption Code to Retrieve Original UTF-8 Content

To decode the hex file back to your original data, we need to reverse every step of the encryption process. Here's the working decryption code:

const crypto = require('crypto');
const fs = require('fs').promises;
const algorithm = 'AES-256-CBC';

const decrypt = async (filePath, password, iv) => {
  // Read the raw hex string from the file
  const encryptedHex = await fs.readFile(filePath, 'utf8');
  
  // Convert the hex string back to a buffer (since encryption outputs a buffer first)
  const encryptedBuffer = Buffer.from(encryptedHex, 'hex');
  
  // Derive the same key as used in encryption (match your key generation method!)
  const key = crypto.scryptSync(password, 'salt', 32);
  
  const decipher = crypto.createDecipheriv(algorithm, key, iv);
  let decrypted = decipher.update(encryptedBuffer);
  decrypted = Buffer.concat([decrypted, decipher.final()]);
  
  // Convert the decrypted buffer back to a UTF-8 string
  return decrypted.toString('utf8');
};

// Example usage (replace with your actual file path, password, and IV)
decrypt('encrypted.hex', 'your-secure-password', Buffer.from('your-16-byte-iv-here', 'hex'))
  .then(originalContent => {
    console.log('Successfully decoded content:', originalContent);
    // Optional: Save the decoded content to a UTF-8 file
    return fs.writeFile('decoded-content.txt', originalContent, 'utf8');
  })
  .catch(err => console.error('Decryption failed:', err));

Critical Checks to Avoid Failures

  • Password & IV Must Match: You need the exact same password and 16-byte IV that were used during encryption. If you lost the IV, you won't be able to recover the data—AES-CBC relies on the IV for correct decryption.
  • Key Generation Consistency: If you used a different method to create the 32-byte key (instead of scrypt), replace the key derivation step with your original method.
  • Hex File Integrity: Make sure the hex file has no extra whitespace, line breaks, or formatting—just the raw hex characters generated by the encryption process.

内容的提问来源于stack exchange,提问作者croweman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:32:55