首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rijndael 128 cfb C#和php

rijndael 128 cfb C#和php
EN

Stack Overflow用户
提问于 2014-01-31 09:38:00
回答 1查看 1K关注 0票数 2

我有个问题。我有一种在php和C#中加密密码的方法,但这两种算法都不能得到相同的结果。有人能帮我吗?

PhP

代码语言:javascript
复制
<?php

$password = 'MySecretPass';
$secret = '65rgt85k89xrDAr3';
$iv = 'AAAAAAAAAAAAAAAA';


$td = mcrypt_module_open('rijndael-128', '', 'cfb','');
mcrypt_generic_init($td, $secret, $iv);

$password = mcrypt_generic($td, $password);

mcrypt_generic_deinit($td);
mcrypt_module_close($td);

$password=base64_encode($password);

echo $password;

?>

C#

代码语言:javascript
复制
var password = padString("MySecretPass");
txtEncrypt.Text = Convert.ToBase64String(EncryptStringToBytes(password,
    Encoding.UTF8.GetBytes("65rgt85k89xrDAr3"), 
    Encoding.UTF8.GetBytes("AAAAAAAAAAAAAAAA"), PaddingMode.None));
txtEncrypt.Text = txtEncrypt.Text;


static byte[] EncryptStringToBytes(string plainText, byte[] key, byte[] iv, PaddingMode mode)
{
    byte[] encrypted;

    using (var rijAlg = new RijndaelManaged { Mode = CipherMode.CFB, BlockSize = 128, Padding = mode })
    {
        rijAlg.Key = key;
                rijAlg.IV = iv;

                var encryptor = rijAlg.CreateEncryptor(rijAlg.Key, rijAlg.IV);

                using (var msEncrypt = new MemoryStream())
                {
                    using (var csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                    {
                        using (var swEncrypt = new StreamWriter(csEncrypt))
                        {
                            swEncrypt.Write(plainText);
                        }
                        encrypted = msEncrypt.ToArray();
                    }
                }
            }
    return encrypted;
}

     private static String padString(String source)
     {
         char paddingChar = ' ';
        int size = 16;
         int x = source.Length % size;
         int padLength = size - x;

         for (int i = 0; i < padLength; i++)
         {
             source += paddingChar;
         }

         return source;
     }

PhP的结果为“/KNlzi/fZOERWL79 79”,而对于c# is /J643dvAR4/Gh0aYHdshNw==。我不知道为什么我的结果不同。此外,我用Java编写了代码,得到了与C#相同的结果。

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2014-02-01 11:37:25

可能是Encoding.GetBytes(string)返回"Unicode编码“。这是一种实际上不存在的编码,但它返回UTF-16。另一方面,您将您的密钥和IV视为ASCII字符。

因此,无论当时使用哪种编码PHP,都会出现不匹配。在将文本字符串转换为字节时,您应该显式地定义应该使用哪种编码,无论是在PHP中还是在C#代码中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21476676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档