PHP vs Java:Base64 en-/特殊字符解码

PHP vs Java:Base64 en-/特殊字符解码,java,php,base64,Java,Php,Base64,我在PHP中有一个加密字符串,需要在HTTP请求中发送它。所以我决定使用Base64编码和URL编码。接收到的是一个Java模块;但当我使用Base64解码器时,它会显示一个完全不同的字符串。如何取回原始的加密字符串。我实际上需要从原始字符串中选取每个字符,并使用其相应的ASCII码进行解密。 // PHP code $encrypted = "©’Ÿ£ šd¤¨m"; $base64 = base64_encode($string); $parameter = urlencode($base

我在PHP中有一个加密字符串,需要在HTTP请求中发送它。所以我决定使用Base64编码和URL编码。接收到的是一个Java模块;但当我使用Base64解码器时,它会显示一个完全不同的字符串。如何取回原始的加密字符串。我实际上需要从原始字符串中选取每个字符,并使用其相应的ASCII码进行解密。
// PHP code

$encrypted = "©’Ÿ£ šd¤¨m"; $base64 = base64_encode($string); $parameter = urlencode($base64);

// this returns eventually: qZKfo6CaZKSobQ%3D%3D

@SotiriosDelimanolis:编辑我的代码来解释名称的来源,是Java软件API从发布的数据中提取名称。很抱歉造成混淆基本上,我无法从Ÿdšdšm生成Java中的qZKfo6CaZKSobQ==我应该问:您的PHP文件是用什么字符集保存的?我猜您的第一个数据是在Windows上,或者在Windows浏览器中。base64中的字节与Windows-1252字符集中的字符匹配,但与其他大多数字符不匹配。在Java中,构造函数字符串bytes[]使用一个默认字符集,该字符集根据平台和环境设置而变化,它看起来像您使用的ASCII。如果指定字符集windows-1252,则应获取字符。但在Java中,如果想要解密,则不需要也不应该转换为字符串;Java crypto使用byte[]表示数据,这正是因为字节在所有系统上都是相同的,但字符却不同。@dave_thompson_085即使PHP在灯上,您对字符集的看法绝对正确;我发现新的Stringbytes,ISO-8859-1有效!我不使用Java加密,但我有一个自定义加密,我需要字符串中每个字符的ASCII码。

// Java code

// FYI: the variable "name" is a string that the Java software extracts from the posted data. String base64 = java.net.URLDecoder.decode(name, "UTF-8"); byte[] bytes = java.util.Base64.getDecoder().decode(base64); String encrypted = new String(bytes);

// This returns: ������d��m