嗨,我正在尝试解码两个字符串,然后使用返回结果(byte []),然后将其放入Biginteger构造函数中,如下所示:
BigInteger bigInteger1 = new BigInteger(1, Base64.decode(myString1,0));
BigInteger bigInteger2 = new BigInteger(1, Base64.decode(myString2,0));
然后将这个BigIntegers放在 java.security.KeyFactory
类上,以创建如下的 RSAPublicKey :
KeyFactory.getInstance(ALG).generatePublic(new RSAPublicKeySpec(bigInteger1,bigInteger2));
然后使用我的公共密钥对这样的字符串进行编码:
public static String encrypt(PublicKey publicKey, String str) {
Cipher instance = Cipher.getInstance(ALG);
instance.init(1, publicKey);
Base64.encodeToString(instance.doFinal(str.getBytes()), 2);
}
在 PHP 上。我用android实现了这个目标,但是当我想用 PHP 做到这一点时,即使是一开始,当我想用 PHP 解码我的字符串时,我仍然遇到很多问题代码:
$encoded = base64_decode($base,true);
$decoded = utf8_decode(base64_decode($encoded));
我将得到以下字符串: ?? 2?] ???? 5N?[?? S
但是在android中,解码后的字符串完全不同,并且始终保持相同的结果
我试图在 JSP 上完成这项工作,但是学习一种新语言确实很困难,而且我没有时间。
我可以在春季启动时执行此项目吗?我有Java代码
请有人帮帮我。
答案 0 :(得分:0)
您两次解码字符串。您应该尝试:
$encoded = base64_encode($base); // and not base64_decode
$decoded = base64_decode($encoded); // will be $base
utf8_decode
正在将使用UTF-8编码的ISO-8859-1字符的字符串转换为单字节ISO-8859-1。确定要用吗?
在PHP中,您可以使用intval
来执行BigInteger()
,但是我不确定您不会遇到整数溢出的情况。
最后,OpenSSL library肯定会完成密钥生成和加密的工作。