You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native AES解密结果出现s:19:...格式,不符预期求解决

问题排查与解决方案

核心问题分析

你得到的s:19:"halo;world;78221199";是PHP字符串序列化格式,说明解密后的原始内容是PHP序列化的字符串,并非直接的目标文本。需要对解密结果做反序列化处理才能得到预期值。同时注意:你代码中使用的encryptedData和base64Key是旧值,需替换为你提供的最新待解密数据和密钥。

修正后的代码

import React, { useEffect, useState } from 'react';
import { View, Text } from 'react-native';
import { atob } from 'js-base64';
import CryptoJS from 'crypto-js';

// 替换为你提供的最新密钥
const base64Key = 'xp+EtmX14oXQMT6AAOnztGU4dRH8OY6YqxkEknmkziw=';

const Decrypt = () => {
    const [decryptedData, setDecryptedData] = useState('');
    
    // 处理PHP字符串反序列化
    const unserializePhpString = (serializedStr) => {
        const match = serializedStr.match(/^s:(\d+):"(.*?)";$/);
        if (match && match.length === 3) {
            const length = parseInt(match[1], 10);
            const value = match[2];
            if (value.length === length) {
                return value;
            }
        }
        return serializedStr;
    };

    useEffect(() => {
        decryptData();
    }, []);

    const decryptData = () => {
        try {
            // 替换为你提供的最新待解密数据
            const encryptedData = 'eyJpdiI6Im5qQTNHbWZwUlpCR1YrK2VhRGJuZVE9PSIsInZhbHVlIjoibW1aVE5qWmI3cjlDendMSTR3bCtNN2RpM0hKRmpVM0FML3RYazJoc3ZQYWVaRHp1L2JkNlgwWE9VWmFzRVJqYSIsIm1hYyI6IjBiNTE0NGQyM2UxZGNmNTgyYzk0YTEzMGVjMmRhZDY4NjQ0NDA0ZDgwY2FkNmMzYjU2MTlhMDYzYjMxNmEwNDEiLCJ0YWciOiIifQ==';
            const decodedData = atob(encryptedData);
            const { iv, value } = JSON.parse(decodedData);

            const key = CryptoJS.enc.Base64.parse(base64Key);
            const decryptedValue = CryptoJS.AES.decrypt(value, key, {
                iv: CryptoJS.enc.Base64.parse(iv),
                mode: CryptoJS.mode.CBC,
                padding: CryptoJS.pad.Pkcs7
            }).toString(CryptoJS.enc.Utf8);
            
            // 反序列化处理解密结果
            const targetValue = unserializePhpString(decryptedValue);
            console.log(targetValue);

            setDecryptedData(targetValue);
        } catch (error) {
            console.error('Decryption error:', error);
            setDecryptedData('Decryption error');
        }
    };

    return (
        <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
            <View style={{ flexDirection: 'row' }}>
                <Text>Decrypted Data: </Text>
                <Text style={{ color: 'red', marginLeft: 4 }}>{decryptedData}</Text>
            </View>
        </View>
    );
};

export default Decrypt;

关键改动说明

  1. 替换密钥与待解密数据:将代码中旧的密钥和加密数据替换为你提供的最新值,确保解密对象正确。
  2. 新增PHP反序列化函数:unserializePhpString匹配PHP序列化字符串格式,提取出真实目标文本,同时做长度校验避免异常格式。
  3. 显式指定加密参数:虽然CryptoJS默认使用CBC模式和Pkcs7填充,显式声明可以避免环境或版本差异导致的隐性问题。

验证说明

运行修正后的代码,解密后会先得到PHP序列化字符串,经过反序列化处理后,即可得到序列化内的原始文本(注:你提供的预期值中是halo;world:78221199,但序列化内容里是halo;world;78221199,需确认是否为输入笔误,代码会如实提取序列化内的内容)。

内容的提问来源于stack exchange,提问作者alep

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 02:33:21