簡體   English   中英

在Windows Mobile 6上使用RSACryptoServiceProvider和公共密鑰字符串進行加密

[英]Encrypt with RSACryptoServiceProvider and public key string on Windows Mobile 6

我的Windows Mobile 6應用程序需要將數據發送到公司的php REST Web服務。 WS具有一種返回公鑰的方法,該方法用於加密移動應用程序用戶的用戶名和密碼。

他們給了我一個用php編寫的示例代碼,該示例代碼簡單地調用WS來獲取公鑰,然后調用opensl_public_encrypt並將其作為Web服務調用返回的值作為公鑰參數。 這是節選

function CallAPI($url, $data = false)
{
    $curl = curl_init();

    $url = sprintf("%s?%s", $url, http_build_query($data)); 

    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);      
    return curl_exec($curl);
}

$public_key=CallAPI(, "https://***.***.***/index.php/rest/getPKey");
$json = json_encode(array("username"=>"********","psw"=>"*******"));
openssl_public_encrypt($json, $encrypted, $public_key);

從Windows Mobile的角度來看,要比這還復雜,我也不是很喜歡RSA加密。

我要做的第一件事是調用WS以獲得公共密鑰,然后將其保存到字符串中。 以下是我用來加密數據的代碼。

ASCIIEncoding ByteConverter = new ASCIIEncoding();

byte[] dataToEncrypt = ByteConverter.GetBytes(data_string);
byte[] public_key = ByteConverter.GetBytes(public_key_string);
byte[] encryptedData;

RSACryptoServiceProvider RSA_provider = new RSACryptoServiceProvider();
RSAParameters key_info = RSA_provider.ExportParameters(false);

key_info.Modulus = public_key;

RSA_provider.ImportParameters(key_info);

encryptedData = RSA_provider.Encrypt(dataToEncrypt, false);
string encrypted_string = ByteConverter.GetString(encryptedData, 0, encryptedData.Length);

return encrypted_string;

如果我嘗試將數據發送到Web服務,則由於身份驗證失敗而失敗,我也注意到從php代碼中,加密字符串始終為256個字符,而.NET加密字符串的長度完全不同。

我做錯了什么? 我在StackOverflow上看到了很多有關使用.NET和RSA加密的問題,但是所使用的功能未包含在Compact Framework中。

先感謝您。

我已經解決了使用BouncyCastle API在.NET端進行加密/解密,並使用UrlEncode在Windows Mobile客戶端和PHP服務器之間發送數據,並將UrlEncoded字符串中的所有“ +”替換為客戶端和服務器都知道的自定義字符串的問題,我決定選擇“ ####”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM