我有一个使用 HmacSHA1 签名/验证请求的球衣 oauth 提供程序。这适用于我的开发和测试平台,其中客户端和服务器都是不同的物理系统。但是,当我迁移到生产平台时,HmacSHA1 算法(提供者端)返回的值与使用相同参数和密钥的 HmacSHA1 算法(客户端)不同,并且我的 oauth 验证失败。
JDK (1.6.x) 在所有平台的提供者和客户端上都是完全相同的版本。
当我将我的 oauth 提供者和客户端切换为使用 PLAINTEXT 签名方法(我知道这对安全性不利)时,它适用于所有平台。
当我深入研究球衣 OAuthSignature.verify() 方法时,它会调用签名方法的(HmacSHA1 或 PLAINTEXT)验证函数,该函数只需使用密钥对 oauth 元素进行签名,并将值与传入的签名进行比较。
对于 HmacSHA1,该方法调用 Base64.encode() 方法来生成签名,但对于 PLAINTEXT,没有进行编码(如预期的那样)。
什么可能导致使用 HmacSHA1 签名算法的 Base64.encode() 方法在两个系统上使用相同的参数和密码产生不同的结果?
提前致谢!--TK