Encode Command

The encode command creates JWT tokens from JSON payloads with various signing options and algorithms.

Basic Usage

jwt-hack encode <JSON_PAYLOAD> [OPTIONS]

Secret-Based Signing (HMAC)

Create JWT tokens using HMAC algorithms with a shared secret:

# HS256 (default)
jwt-hack encode '{"sub":"1234", "name":"John Doe"}' --secret=mysecret

# HS384
jwt-hack encode '{"sub":"1234", "name":"John Doe"}' --secret=mysecret --algorithm=HS384

# HS512  
jwt-hack encode '{"sub":"1234", "name":"John Doe"}' --secret=mysecret --algorithm=HS512

Key-Based Signing (RSA/ECDSA)

Create JWT tokens using asymmetric algorithms with private keys:

# RSA256
jwt-hack encode '{"sub":"1234", "name":"John Doe"}' --private-key=private.pem --algorithm=RS256

# RSA384
jwt-hack encode '{"sub":"1234", "name":"John Doe"}' --private-key=private.pem --algorithm=RS384

# RSA512
jwt-hack encode '{"sub":"1234", "name":"John Doe"}' --private-key=private.pem --algorithm=RS512

# ECDSA256
jwt-hack encode '{"sub":"1234", "name":"John Doe"}' --private-key=ec-private.pem --algorithm=ES256

Unsigned Tokens

Create unsigned JWT tokens for testing:

jwt-hack encode '{"sub":"1234", "name":"John Doe"}' --no-signature

Custom Headers

Add custom header fields to the JWT:

jwt-hack encode '{"sub":"1234"}' --secret=test --header='{"kid":"key1","typ":"JWT"}'

DEFLATE Compression

Create compressed JWT tokens:

jwt-hack encode '{"sub":"1234", "data":"large payload"}' --secret=test --compress

The --compress flag:

  • Compresses the payload using DEFLATE
  • Reduces token size for large payloads
  • Maintains compatibility with JWT standards
  • Can be decoded automatically by the decode command

JWE (JSON Web Encryption)

Create encrypted JWT tokens:

jwt-hack encode '{"sensitive":"data"}' --secret=test --jwe

JWE encoding:

  • Encrypts the payload content
  • Uses symmetric encryption with the provided secret
  • Creates 5-part JWE structure
  • Provides confidentiality in addition to integrity

Command Options

Required

  • <JSON_PAYLOAD> - The JSON payload to encode

Authentication Options

  • --secret <SECRET> - Secret for HMAC algorithms
  • --private-key <PATH> - Path to private key file for RSA/ECDSA

Algorithm Options

  • --algorithm <ALG> - Algorithm to use (HS256, HS384, HS512, RS256, RS384, RS512, ES256, ES384)
  • --no-signature - Create unsigned token

Additional Options

  • --header <JSON> - Custom header fields as JSON
  • --compress - Enable DEFLATE compression
  • --jwe - Create JWE encrypted token

Examples

Standard JWT with HMAC

jwt-hack encode '{"sub":"user123","role":"admin","exp":1640995200}' --secret=my-secret-key

JWT with RSA Signature

jwt-hack encode '{"iss":"myapp","aud":"users","exp":1640995200}' --private-key=rsa-key.pem --algorithm=RS256

JWT with Custom Headers

jwt-hack encode '{"user":"john"}' --secret=test --header='{"kid":"key-1","alg":"HS256","typ":"JWT"}'

Compressed JWT

jwt-hack encode '{"data":"very long payload content here..."}' --secret=test --compress

Unsigned JWT for Testing

jwt-hack encode '{"test":"payload"}' --no-signature

Key File Formats

JWT-HACK supports standard key file formats:

RSA Private Keys

  • PKCS#1 format - -----BEGIN RSA PRIVATE KEY-----
  • PKCS#8 format - -----BEGIN PRIVATE KEY-----

ECDSA Private Keys

  • SEC1 format - -----BEGIN EC PRIVATE KEY-----
  • PKCS#8 format - -----BEGIN PRIVATE KEY-----

Output

The encode command outputs:

  • The complete JWT token
  • Token structure breakdown
  • Algorithm and signing information
  • Any compression or encryption details