त्वरित एक जो अब तक मुझे (लंबी रात) से बच रहा है। मैं PHP बनाम जावा में एईएस 256 की तुलना कर रहा हूं और विसंगतियों को देख रहा हूं। कृपया सादगी के लिए एसीआई कुंजी और शून्य चतुर्थ को अनदेखा करें, उनको उत्पादन में बदल दिया जाएगा। लेकिन मैं और अतीत यह पहली प्राप्त करने की आवश्यकता को समझ नहीं सकता मैं कहाँ स्खलित कर रहा हूँ:एईएस 256 जावा बनाम PHP
पीएचपी:
echo base64_encode(
mcrypt_encrypt(
MCRYPT_RIJNDAEL_128,
"1234567890ABCDEF1234567890ABCDEF",
"This is a test",
MCRYPT_MODE_CBC,
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
)
);
जावा
byte[] key = "1234567890ABCDEF1234567890ABCDEF".getBytes("UTF-8");
byte[] iv = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
AlgorithmParameterSpec ivSpec = new IvParameterSpec(iv);
SecretKeySpec newKey = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, newKey, ivSpec);
byte[] results = cipher.doFinal("This is a test".getBytes("UTF-8"));
return Base64.encodeToString(results,Base64.DEFAULT);
पीएचपी उत्पादन: 0KwK+eubMErzDaPU1+mwTQ==
जावा उत्पादन : DEKGJDo3JPtk48tPgCVN3Q==
मैं ओ_ओ की अपेक्षा नहीं कर रहा था!
मैंने MCRYPT_MODE_CBC
, MCRYPT_MODE_CFB
, MCRYPT_MODE_ECB
, MCRYPT_MODE_NOFB
, आदि का भी प्रयास किया है .. उनमें से कोई भी जावा स्ट्रिंग का उत्पादन नहीं करता है।
आप ("एईएस") को बदलने 'Cipher.getInstance की कोशिश की है' –
Yezzir, "एईएस/सीबीसी/NoPadding" IllegalBlockSizeException पैदा करता है: डेटा ब्लॉक नहीं आकार गठबंधन। "एईएस/सीबीसी/पीकेसीएस 5 पैडिंग" "DEKGJDo3JPtk48tPgCVN3Q ==" उत्पन्न करता है, जैसा कि "एईएस/सीबीसी/पीकेसीएस 7 पैडिंग" है। –
वह बेवकूफ था, बिना पैडिंग के आपको यह सुनिश्चित करना होगा कि आप ब्लॉक आकार का एक बहु प्रदान कर रहे हैं। मैं जो जवाब मानता हूं उसके साथ मैं एक उत्तर पोस्ट करूंगा। –