首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

iOS 易寶支付 AES/ECB/PKCS5Padding 加密對接指南

     編輯:程式設計綜合問答

問題背景

iOS 端對接易寶充值接口,使用 AES-128-ECB-PKCS5Padding 加密,易寶端解密失敗。注意:非 256 位,而是 128 位。

關鍵點檢查清單

  1. 密鑰長度:16 字節(128 位),不足補 0,超出截取
  2. 模式:ECB(無 IV)
  3. 填充:PKCS5Padding(等同 PKCS7Padding,填充字節值 = 填充長度)
  4. 輸出編碼:Base64(易寶通常要求)或 Hex,需確認文檔
  5. 字符集:明文/密鑰均用 UTF-8 編碼獲取字節

iOS 參考代碼

+ (NSString *)aes128ECBPKCS5Encrypt:(NSString *)plainText key:(NSString *)key {
    NSData *plainData = [plainText dataUsingEncoding:NSUTF8StringEncoding];
    NSData *keyData = [key dataUsingEncoding:NSUTF8StringEncoding];
    // 密鑰截取/補齊 16 字節
    NSMutableData *key16 = [NSMutableData dataWithLength:16];
    [key16 replaceBytesInRange:NSMakeRange(0, MIN(keyData.length, 16)) withBytes:keyData.bytes];
    
    size_t outLen;
    uint8_t outBuf[plainData.length + kCCBlockSizeAES128];
    CCCryptorStatus status = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS5Padding | kCCOptionECBMode,
                                     key16.bytes, kCCKeySizeAES128, nil,
                                     plainData.bytes, plainData.length,
                                     outBuf, sizeof(outBuf), &outLen);
    if (status == kCCSuccess) {
        NSData *cipherData = [NSData dataWithBytes:outBuf length:outLen];
        return [cipherData base64EncodedStringWithOptions:0]; // 或 Hex
    }
    return nil;
}

調試建議

用在線 AES 工具(如 devglan)驗證密鑰、明文、密文三方一致,排除編碼/填充差異。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved