Gặp lỗi MAC is invalid khó hiểu khi dùng Crypt Laravel
Mình có dùng Crypt của Laravel để mã hóa dữ liệu. Luồng dữ liệu sẽ là như này:
Domain A gửi request lên đến 1 service, service đó sẽ trả về 1 đoạn crypt và domain A sẽ truyền crypt đó sang cho domain B, domain B sẽ gửi request lại lên server service ban đầu để decrypt và lấy data về domain B. Vấn đề bắt đầu xảy ra khi domain B gửi crypt lên để decrypt thì service đó không decrypt được và trả về lỗi MAC is invalid. Ok, mình bắt đầu thử 1 vài case và phát hiện ra nếu mình gửi lại request từ domain A lên service để gen crypt mới cùng lúc đó mình cho domain B gửi lại request lên để decrypt thì lại decrypt đc??? (server service chưa gen xong đoạn crypt mới, nếu đã gen xong thì sẽ không decrypt đc nữa). Đến đây thì mình đang không biết bug sao nữa luôn
1 CÂU TRẢ LỜI
@huukimit mình mới bug đc ra vấn đề là biến là do biến APP_KEY ở server service với APP_KEY ở domain B khác nhau. Có thể là do mình test ở local nên là cùng server nên file có vấn đề gì đấy với .env ), trước cũng bị 1 phát vì domain gửi request lên service mà service lại truy cập vào db bằng config .env ở domain B
Mình tự hỏi khi encrypt bạn có custom secret key không nhỉ vì theo mình biết thì MAC nó được sinh ra sau khi hash value + secret key. Khả năng cao là secret key không đúng nên lúc compare chuỗi MAC sẽ thấy khác biệt và throw exception.
@huukimit không bạn ơi, lúc encrypt mình chỉ truyền data của mình vào thôi, lạ ở chỗ là khi domain A đang gửi lại request để gen ra crypt mới thì domain B gửi request lên thì lại decrypt đc, mình có log ra thì nó decrypt được chính đoạn crypt mà request trước bị lỗi
@TuanAnh9996![🤔](https://twemoji.maxcdn.com/v/14.0.2/72x72/1f914.png)
![🤔](https://twemoji.maxcdn.com/v/14.0.2/72x72/1f914.png)
![🤔](https://twemoji.maxcdn.com/v/14.0.2/72x72/1f914.png)
@TuanAnh9996 Đúng rồi đấy bạn, như bạn nói ở trên thì bạn không custom secret key, laravel sẽ sử dụng APP_KEY làm secret key khi tạo hash. Lúc này bạn bị rơi vào trong trường hợp secret ở hai bên khác nhau nên chuỗi MAC sẽ không còn nguyên vẹn.