任何人都可以帮助我使用PHP加密的解密数据(C#)吗?
在PHP中使用函数:
public function encryptString($str) {
$block = mcrypt_get_block_size('rijndael_128', 'ecb');
$pad = $block - (strlen($str) % $block);
$str .= str_repeat(chr($pad), $pad);
$res = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $this->key, $str, MCRYPT_MODE_ECB);
return $res;
}
同样在Java中我使用:
public byte[] encryptBytes(byte[] source) {
try {
byte[] raw = key.getBytes(Charset.forName("UTF-8"));
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encrypted = cipher.doFinal(source);
return encrypted;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
我的C#代码:
public string encryptString(string data, string key)
{
byte[] keyArray = Encoding.UTF8.GetBytes(key);
byte[] toEncryptArray = Encoding.UTF8.GetBytes(data);
RijndaelManaged rDel = new RijndaelManaged();
rDel.Key = keyArray;
rDel.Mode = CipherMode.ECB;
rDel.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = rDel.CreateEncryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return Encoding.UTF8.GetString(resultArray);
}
键 - 32个字符的字符串。
我无法在C#中正确解密加密数据。
答案 0 :(得分:0)
你C#正在使用字符串而不是字节数组。这不同于例如你的Java代码。然而
return Encoding.UTF8.GetString(resultArray);
当密文包含对UTF-8无效编码的字节时,将丢失数据。
此外,我建议您在C#代码中使用CryptoStream
; .NET加密库似乎以流式方法为中心(无论好坏)。