Fix AES key charset encoding issue in WxPay decryptToString method #3710
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The WeChat Pay V3 API notification parsing was failing with "Invalid AES key length: 33 bytes" error due to inconsistent charset encoding when converting strings to byte arrays.
Problem
The
AesUtils.decryptToString()
method was usingString.getBytes()
without specifying the charset, which caused platform-dependent behavior:When the platform default charset differed from UTF-8, or when the API key contained non-ASCII characters, the byte array length could exceed the required 32 bytes for AES-256 encryption, causing the
InvalidKeyException: Invalid AES key length: 33 bytes
error.Solution
Updated all
getBytes()
calls in thedecryptToString()
method to explicitly use UTF-8 encoding:This ensures consistent behavior across all platforms and environments, matching the pattern already used in the
HMACSHA256()
method within the same class.Impact
Fixes #3698.
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.