c. Decryption Operation Guide
This guide details how to decrypt encrypted response data obtained from WaaS APIs.i. Decryption Process Step-by-Step Explanation
The following are the steps for decryption operations:- Obtain encrypted data from the API response
- Perform Base64 decoding of the data
- Decrypt using the RSA public key
- Parse the decrypted result into the business object
ii. Decryption Code Examples
class DecryptionExample {
class AddressVO {
private String tenantUserId;
private String chainName;
private String address;
// TODO: Add getter and setter methods
}
public static void main(String[] args) {
try {
// ===================== 1. Get API response =====================
// Send API request and get response
APIResult<String> response = restTemplate.postForObject(
"https://waas2-out-api.powersafe-rel.cc/api/v1/api/user/getUserAddress",
httpEntity,
APIResult.class
);
// Extract encrypted data (ensure response format matches API)
String encryptedData = response.getData();
// ===================== 2. Base64 decoding =====================
// Decode using Base64 utility class (implementation reference utility classes)
byte[] decodedBytes = Base64Util.decodeString(encryptedData);
// ===================== 3. RSA public key decryption =====================
// Use the same public key as for requests
String publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQ...";
// Perform RSA decryption
byte[] decryptedBytes = RSAUtils.decryptByPublicKey(
decodedBytes,
publicKey
);
// ===================== 4. Parse business object =====================
// Convert decrypted JSON data to business object
AddressVO address = JsonUtils.fromJson(
new String(decryptedBytes, StandardCharsets.UTF_8),
AddressVO.class
);
// ===================== 5. Use decrypted data =====================
System.out.println("Parsed address information:");
System.out.println("Merchant user ID: " + address.getTenantUserId());
System.out.println("Chain name: " + address.getChainName());
System.out.println("Wallet address: " + address.getAddress());
} catch (Exception e) {
System.err.println("\nError occurred during decryption: " + e.getMessage());
e.printStackTrace();
}
}
}
async function main() {
try {
// ===================== 1. Simulate getting API response =====================
// Assume request was sent and response received
const response = await axios.post(
'https://waas2-out-api.powersafe-rel.cc/api/v1/api/user/getUserAddress',
{ /* Request body */ },
{ headers: { 'X-API-KEY': 'MERCHANT_123456' } }
);
// Get encrypted data (assume response structure is { data: "encrypted data", ... })
const encryptedData = response.data.data;
// ===================== 2. Base64 decoding =====================
const decodedBytes = Base64Util.decodeString(encryptedData);
// ===================== 3. RSA public key decryption =====================
const publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQ...";
// Decrypt data
const decryptedBytes = await RSAUtils.decryptByPublicKey(
decodedBytes.buffer,
publicKey
);
// Convert to string
const decryptedText = new TextDecoder().decode(decryptedBytes);
// ===================== 4. Parse business object =====================
// Deserialize to AddressVO instance using JsonUtils
const address = JsonUtils.fromJson(decryptedText, AddressVO);
// ===================== 5. Use decrypted data =====================
console.log("Parsed address information:");
console.log("Merchant user ID: " + address.getTenantUserId());
console.log("Chain name: " + address.getChainName());
console.log("Wallet address: " + address.getAddress());
} catch (error) {
console.error("\nError occurred during decryption: " + error.message);
console.error(error.stack);
}
}
// Execute main function
main();
import requests
from JsonUtils import JsonUtils
from RSAUtils import RSAUtils
from Base64Util import Base64Util
def main():
try:
# ===================== 1. Simulate getting API response =====================
# Assume request was sent and response received
response = requests.post(
'https://waas2-out-api.powersafe-rel.cc/api/v1/api/user/getUserAddress',
data={},
headers={'X-API-KEY': 'MERCHANT_123456'}
)
# Parse JSON response and get encrypted data
response_data = response.json()
encrypted_data = response_data['data']
# ===================== 2. Base64 decoding =====================
decoded_bytes = Base64Util.decode_string(encrypted_data)
# ===================== 3. RSA public key decryption =====================
public_key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQ..."
decrypted_bytes = RSAUtils.decrypt_by_public_key(
decoded_bytes,
public_key
)
# Convert to string
decrypted_text = decrypted_bytes.decode('utf-8')
# ===================== 4. Parse business object =====================
# Deserialize to AddressVO instance using JsonUtils
address_data = JsonUtils.from_json(decrypted_text)
address = AddressVO(address_data)
# ===================== 5. Use decrypted data =====================
print("\nParsed address information:")
print("Merchant user ID:", address.get_tenant_user_id())
print("Chain name:", address.get_chain_name())
print("Wallet address:", address.get_address())
except Exception as e:
print("\nError occurred during decryption:", str(e))
import traceback
traceback.print_exc()
if __name__ == "__main__":
main();
