wdalmut/rc4-support
Lightweight RC4 stream cipher implementation for PHP. Instantiate RC4 with a secret key, then encrypt/decrypt strings via __invoke() or rc4() method. Includes PHPUnit tests for verification.
Installation:
composer require wdalmut/rc4-support
Add to composer.json if not using autoloading:
"autoload": {
"psr-4": {
"App\\": "app/",
"Wdalmut\\RC4\\": "vendor/wdalmut/rc4-support/src/"
}
}
Run composer dump-autoload.
First Use Case: Encrypt/obfuscate a string in a Laravel controller or service:
use Wdalmut\RC4\RC4;
$rc4 = new RC4(config('app.rc4_key')); // Store key in `.env`
$encrypted = $rc4('sensitive-data');
Configuration:
Store your RC4 key in .env:
RC4_KEY=your-strong-secret-key-here
Access it in Laravel:
$key = config('app.rc4_key');
Encryption/Decryption: RC4 is symmetric, so the same key encrypts/decrypts. Use it for:
$rc4 = new RC4(config('app.rc4_key'));
$secret = 'api_token_123';
$obfuscated = $rc4($secret); // Encrypt
$decrypted = $rc4($obfuscated); // Decrypt
Integration with Laravel Services: Create a dedicated service class:
namespace App\Services;
use Wdalmut\RC4\RC4;
class RC4Service {
protected $rc4;
public function __construct() {
$this->rc4 = new RC4(config('app.rc4_key'));
}
public function obfuscate(string $data): string {
return $this->rc4($data);
}
}
Inject into controllers:
public function store(Request $request, RC4Service $rc4) {
$obfuscatedToken = $rc4->obfuscate($request->token);
// Store $obfuscatedToken in DB/logs
}
Middleware for Request/Response: Obfuscate sensitive request data or responses:
namespace App\Http\Middleware;
use Closure;
use App\Services\RC4Service;
class ObfuscateSensitiveData {
protected $rc4;
public function __construct(RC4Service $rc4) {
$this->rc4 = $rc4;
}
public function handle($request, Closure $next) {
$request->merge([
'token' => $this->rc4->obfuscate($request->token)
]);
return $next($request);
}
}
Database Storage: Store obfuscated data in plaintext columns (not encrypted, but harder to read):
$user->api_token = $rc4->obfuscate($request->api_token);
$user->save();
RC4 Limitations:
.env and never commit it.Debugging:
\Log::debug('RC4 Key Length:', strlen(config('app.rc4_key')));
Config Quirks:
config() helper to avoid magic strings:
// Bad
$rc4 = new RC4("hardcoded-key");
// Good
$rc4 = new RC4(config('app.rc4_key'));
Custom Key Sources: Override the constructor to fetch keys dynamically (e.g., from a database or API):
class DynamicRC4 extends RC4 {
public function __construct() {
$key = app('key-service')->getRc4Key();
parent::__construct($key);
}
}
Base64 Encoding: RC4 outputs binary data. Encode for storage/transmission:
use Wdalmut\RC4\RC4;
use Illuminate\Support\Str;
$rc4 = new RC4(config('app.rc4_key'));
$obfuscated = base64_encode($rc4('sensitive-data'));
Laravel Facade: Create a facade for cleaner syntax:
// app/Providers/AppServiceProvider.php
use Wdalmut\RC4\Facades\RC4;
public function boot() {
RC4::setKey(config('app.rc4_key'));
}
Then use:
$obfuscated = RC4::obfuscate('data');
Testing: Mock the RC4 service in unit tests:
$mockRc4 = Mockery::mock(RC4::class, ['test-key']);
$mockRc4->shouldReceive('__invoke')->andReturn('mocked-output');
$this->app->instance(RC4::class, $mockRc4);
encrypt() for sensitive data and RC4 for readability.How can I help you explore Laravel packages today?