Daha önce ben noktasına Mcrypt PHP için bazı C + + CryptoPP Rijndael_128 CBC yönetilen kod, ama şimdi DAY moduyla ilgili sorunlar yaşıyorum. (Her şey değil, iyi ilk bayt eşleşmeleri ama bu tesadüf olabilir) C + + ve PHP sonuçları eşleşmiyor. PHP'nin mcrypt doğru anahtar uzunluğu ayarı değil gibi bazı teşhis ile görünüyor?
İşte C + + (basitlik için kaldırılmıştır teşhis ve çeşitli eşyalar) var:
CryptoPP::CFB_Mode<CryptoPP::AES>::Encryption encryptor(g_encrypt_key, CryptoPP::AES::DEFAULT_KEYLENGTH, g_encrypt_iv);
// CryptoPP::AES::DEFAULT_KEYLENGTH has the value of 16
// The HexEncoder is being used for debugging purposes, product code uses Base32
CryptoPP::StringSource( sInput.c_str(), true,
new CryptoPP::StreamTransformationFilter( encryptor,
new CryptoPP::HexEncoder( new CryptoPP::StringSink( sEncryptedOut ) )
)
);
Ve burada PHP bulunuyor:
$cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CFB, '');
mcrypt_generic_init($cipher, $g_encrypt_key, $g_encrypt_iv);
$sEncryptedOutput = mcrypt_generic( $cipher, $sInput);
mcrypt_generic_deinit($cipher);
mcrypt_module_close($cipher);
g_encrypt_key
ve g_encrypt_iv
hem 16 byte uzunluğunda, ve C + + ve PHP sürümleri için bayt maç. PHP sürümü için (evet ben kontrol bunlar aynıdır) bayt inşa ikili dizedir.
I have added calls to the PHP version to check $cipher
's block size, key size, etc.
The block size and iv size are both 16; supported key sizes are reported as 16, 24, and 32 - all as expected.
Ben sorun olduğunu düşünüyorum nerede, KeySize 32 bayt olarak rapor ediliyor olmasıdır. Mcrypt docs bakarak, Keysize ayar tek yolu gerekli büyüklükte bir anahtar temin edilmesi. Ama ben 16 baytlık bir anahtar geçiyorum! Peki neden 32 bayt anahtarın varlığını bildiriyor? CFB modu 32 bit anahtar kullanmanız gerekiyorsa, o zaman neden CryptoPP o kadar tamam kabul eder? Çözüm nedir? Ben sağlanmıştır 16 bayt tuşunu kullanmak PHP zorlayabilirsiniz? Yoksa Mcrypt daha CryptoPP farklı bir ayara varsaymak hangi eksik bir parametre var mı?
Ben çıkan şifrelenmiş verilerin uzunluğunu en aza indirmek istiyorum çünkü ben CFB modunu kullanıyorum. Dolgu tanıtmak istiyorum birkaç bayt, bu uygulamada önemi var.
Ben şifrelemek / C + + şifresini ancak PHP şifrelemek gerekiyor. AES benim uygulama için tartışmasız overkill - verilerin bireysel bayt işlevi açık değildir ki ben ihtiyacım minimum "bayt çabalıyorlar iyi" dir.