我正在尝试对phps中的openssl_public_encrypt和其他openssl函数的输出进行字符串化,并且输出似乎未经过utf8编码。简而言之,这是生成错误的示例代码。
ready
预期输出将是带有utf8编码属性值的字符串化json对象。相反,我收到此错误消息:
“错误:JsonException:格式错误的UTF-8字符,可能在'php文件'中编码不正确:24”
当我运行上面的代码片段时,“ mb_detect_encoding”行有时(但并非总是)输出“ UTF-8”。
openssl_public_encrypt似乎有问题,其中输出不符合utf-8编码。
检测到一个非常奇怪的行为:mb_detect_encoding可能检测不到正确的,因为json_encode函数每次都会失败。可能是应为openssl_public_encrypt的这种行为。
无论如何,我无法将openssl_public_encrypt的所谓UTF-8编码输出字符串化。我现在使用base64编码的加密数据作为解决方案,但是数据开销约为原始数据的两倍。
我使用php中的openssl与rss,ecdh和aes结合使用javascript webCrypto进行加密/解密。
任何人都可以帮助我解决这个问题,因为我可能不是唯一遇到此问题的人。
编辑:
弄错了! php中的json_encode函数是showtopper!尽管据我所知为UTF-8指定了json,但它不接受UTF-8编码的json字符串。它肯定会被file_get_contents(“ php:// input”)接受并可以恢复。有什么理由吗?
答案 0 :(得分:0)
“格式错误的UTF-8字符” 表示输入数据包含无效字符。
如果数据是硬编码的,请使用UTF-8(无BOM)编码保存文件。
如果没有,请使用iconv转换或检查输入数据。
加密的数据为二进制格式,您可能需要先进行base64编码,然后再运行json编码
$jsontest->data1 = base64_encode($encrypted);