这个解码的有我不懂C#,我想换成PHP的,请人注释一下代码

maoyesky 2017-11-10 04:42:54
public static string AESDecrypt(string text, string password)
{
RijndaelManaged rijndaelCipher = new RijndaelManaged();
rijndaelCipher.Mode = CipherMode.ECB;
rijndaelCipher.Padding = PaddingMode.PKCS7;
rijndaelCipher.KeySize = 128;
rijndaelCipher.BlockSize = 128;
byte[] encryptedData = strToToHexByte(text);
byte[] pwdBytes = System.Text.Encoding.UTF8.GetBytes(password);
byte[] keyBytes = new byte[16];
int len = pwdBytes.Length;
if (len > keyBytes.Length) len = keyBytes.Length;
System.Array.Copy(pwdBytes, keyBytes, len);
rijndaelCipher.Key = keyBytes;
rijndaelCipher.IV = iv;
ICryptoTransform transform = rijndaelCipher.CreateDecryptor();
byte[] plainText = transform.TransformFinalBlock(encryptedData, 0, encryptedData.Length);
return Encoding.UTF8.GetString(plainText);
}

/// <summary>
/// 16进制转码byte[]
/// </summary>
/// <param name="hexString"></param>
/// <returns></returns>
private static byte[] strToToHexByte(string hexString)
{
hexString = hexString.Replace(" ", "");
//if ((hexString.Length % 2) != 0)
// hexString += " ";
byte[] returnBytes = new byte[hexString.Length / 2];
for (int i = 0; i < returnBytes.Length; i++)
returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
return returnBytes;
}
...全文
207 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
maoyesky 2017-11-14
  • 打赏
  • 举报
回复
b95ee2d008a30f45作为key时无法解码 如果修改成b95ee2d008a30f25或者是其倒数第二位修改比3小的数值又可以解码
maoyesky 2017-11-12
  • 打赏
  • 举报
回复
感谢xuzuning !
xuzuning 2017-11-11
  • 打赏
  • 举报
回复
aZfx19gmNxT6eOll3rrP58QPh5UBRPZ+1nJzfUslPsc= 是密文的 base64 编码 D853AC3991D268C2069D52CF13F60C9B 是密文的 十六进制表示 没有本质的区别 关键是你需要有密钥
maoyesky 2017-11-11
  • 打赏
  • 举报
回复
我用php加密后的出来的是带大小字 如下 加密串:aZfx19gmNxT6eOll3rrP58QPh5UBRPZ+1nJzfUslPsc= 原串:Hello, world! 但另人用C#加密给我的全部是大写,密匙用一样的。 我就是想把别用用C#加密的用php来解码,如 [tel] => D853AC3991D268C2069D52CF13F60C9B [phone] => D853AC3991D268C2069D52CF13F60C9B 难道C#加密的,用php不能解码吗
江湖评谈 2017-11-11
  • 打赏
  • 举报
回复
先去看看php aes怎么玩的
  • 打赏
  • 举报
回复
RijndaelManaged 就是AES加密解密,这个都是通用标准
maoyesky 2017-11-10
  • 打赏
  • 举报
回复
只要注释主要的代码就行。如  rijndaelCipher.KeySize = 128; rijndaelCipher.BlockSize = 128; byte[] encryptedData = strToToHexByte(text); byte[] pwdBytes = System.Text.Encoding.UTF8.GetBytes(password); byte[] keyBytes = new byte[16]; int len = pwdBytes.Length; if (len > keyBytes.Length) len = keyBytes.Length; System.Array.Copy(pwdBytes, keyBytes, len); rijndaelCipher.Key = keyBytes; rijndaelCipher.IV = iv;

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧