Random_bytes trong php

Tôi đang cố gắng sử dụng mã hóa AES-256 bit GCM, giữa PHP và Java. Vấn đề là tôi nhận được ngoại lệ này ở phía Java trên Android

Nội dung chính Hiển thị

  • AES là gì
  • AES 256 GCM mạnh cỡ nào?
  • Chế độ GCM trong AES là gì?
  • AES 128 GCM có an toàn không?

Decryption Error.!
javax.crypto.AEADBadTagException: error:1e06e065:Cipher functions:aead_aes_gcm_open:BAD_DECRYPT

mã tôi đang sử dụng. về phía PHP

$algo = 'aes-256-gcm';
$iv   = random_bytes[openssl_cipher_iv_length[$algo]];
$key  = "secretKey12345678998765432112345"; // 256 bit 
$data = "HelloWorld";
$ciphertext = openssl_encrypt[
 $data,
 $algo,
 $key,
 OPENSSL_ZERO_PADDING,
 $iv,
 $tag
];
echo base64_encode[$key];
echo base64_encode[$iv];
echo $ciphertext;

và trên Java, Android, tôi đang sử dụng mã này

static final int GCM_TAG_LENGTH = 16;
...
String decryptedText = null;
    byte[] encodedData = Base64.decode[data, Base64.DEFAULT];
    byte[] decodediv = Base64.decode[iv, Base64.DEFAULT];
    byte[] decodedKey = Base64.decode[key, Base64.DEFAULT];

    Log.e["data", new String[encodedData, 0]];
    Log.e["iv", new String[decodediv, 0]];
    Log.e["key", new String[decodedKey, 0]];
    Log.d["test", "test"];

    SecretKey originalKey = new SecretKeySpec[decodedKey, 0, decodedKey.length, "AES"];

    try {
        Cipher c = Cipher.getInstance["AES/GCM/NoPadding"];

        c.init[Cipher.DECRYPT_MODE, originalKey , new GCMParameterSpec[GCM_TAG_LENGTH * 8,decodediv]];
        byte[] decodedData = c.doFinal[encodedData];
        decryptedText = new String[decodedData, "UTF-8"];
        Log.e["MainActivity", "After decryption : "+ decryptedText];
    } catch [Exception e] {
        Log.e["MainActivity", "Decryption Error.!", e];
    }
    return decryptedText;

Tôi đang sử dụng mã php từ trang này

zimuel.it/blog/authenticated-encrypt-with-openssl-and-php-7-‌​1

Tôi đang sử dụng php v7. 1. 4

Điều gì có thể là nguyên nhân ngoại lệ?

Tệp này chứa văn bản Unicode hai chiều có thể được diễn giải hoặc biên dịch khác với nội dung hiển thị bên dưới. Để xem lại, hãy mở tệp trong trình chỉnh sửa hiển thị các ký tự Unicode bị ẩn. Tìm hiểu thêm về các ký tự Unicode hai chiều

nhập javax. tiền điện tử. Mật mã; nhập javax. tiền điện tử. SecretKey;nhập javax. tiền điện tử. SecretKeyFactory; nhập javax. tiền điện tử. thông số kỹ thuật. GCMparameterSpec;nhập javax. tiền điện tử. thông số kỹ thuật. PBEKeySpec; nhập javax. tiền điện tử. thông số kỹ thuật. SecretKeySpec;public class T {char tĩnh cuối cùng riêng tư[] hexArray = "0123456789ABCDEF". toCharArray[]; Chuỗi tĩnh riêng bytesToHex[byte[] byte] {char[] hexChars = new char[bytes. độ dài * 2]; cho [ int j = 0; j < byte. chiều dài; . ngoài. println["IV. " + bytesToHex[iv]];PBEKeySpec pbeKeySpec = PBEKeySpec mới[mật khẩu. toCharArray[], iv, 200_000, 128];SecretKeyFactory nhà máy = SecretKeyFactory. getInstance["PBKDF2WithHmacSHA256"];SecretKey pbeKey = nhà máy. generateSecret[pbeKeySpec];byte[] keyBytes = pbeKey. getEncoded[];Hệ thống. ngoài. println["KHÓA. " + bytesToHex[keyBytes]];SecretKey key = new SecretKeySpec[keyBytes, "AES"];GCMParameterSpec gcmSpec = new GCMParameterSpec[128, iv];Cipher cipher = Cipher. getInstance["AES/GCM/NoPadding"];mã hóa. init[Mật mã. ENCRYPT_MODE, key, gcmSpec];byte[] ciphertext = cipher. doFinal[văn bản. getBytes[]];byte[] kết quả = byte mới[iv. độ dài + bản mã. chiều dài];Hệ thống. bản sao mảng [iv, 0, kết quả, 0, iv. chiều dài];Hệ thống. bản sao mảng [bản mã, 0, kết quả, iv. độ dài, bản mã. chiều dài];Hệ thống. ngoài. println[byteToHex[result]];}}------------------------------------ . '. bin2hex[$iv]. "\n";// ----------------$key = hash_pbkdf2['sha256', $pw, $iv, 200000, 16, true];echo 'KEY. '. bin2hex[$key]. "\n";$encrypted = openssl_encrypt[$text,"aes-128-gcm",$key,$options=OPENSSL_RAW_DATA. OPENSSL_ZERO_PADDING,$iv,$tag,"",16];$result = $iv. đã mã hóa $. $tag;echo strtoupper[bin2hex[$result]]. "\N";

AES là gì

2. 1 Trong Java, chúng tôi sử dụng AES/GCM/NoPadding để thể hiện thuật toán AES-GCM . Đối với đầu ra được mã hóa, chúng tôi đặt tiền tố 16 byte IV cho văn bản được mã hóa [bản mã], vì chúng tôi cần cùng một IV để giải mã.

AES 256 GCM mạnh cỡ nào?

AES-256 khó 340 tỷ tỷ tỷ tỷ tỷ lần so với AES-128 . Đặt điều này vào viễn cảnh, vũ trụ đã 14 tỷ năm tuổi. Do đó, có thể nói rằng ngay cả ở kích thước bit thấp hơn, AES vẫn có khả năng chống lại các cuộc tấn công vũ phu từ các máy tính thông thường.

Chế độ GCM trong AES là gì?

AES-GCM là chế độ hoạt động của mật mã khối cung cấp tốc độ mã hóa được xác thực và tính toàn vẹn dữ liệu cao

Chủ Đề