Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何做到这一点:J2ME加密C#解密和J2ME解密C#加密?_C#_Java Me_Aes - Fatal编程技术网

如何做到这一点:J2ME加密C#解密和J2ME解密C#加密?

如何做到这一点:J2ME加密C#解密和J2ME解密C#加密?,c#,java-me,aes,C#,Java Me,Aes,C# 生产:ff53bc51c0caf5de53ba850f7ba08b58345a89a51356d0e030ce1367606c5f08 java生产:375c52fd202696dba679e57f612ee95e707ccb05aff368b62b2802d5fb685403 有人能帮我修改代码吗?我认为算法是以稍微不同的方式构建的和/或salt键是以不同的方式进行解释的。我认为算法是以稍微不同的方式构建的和/或salt键是以不同的方式进行解释的。在Java代码中,您不使用IV 我对C语

C#

生产:
ff53bc51c0caf5de53ba850f7ba08b58345a89a51356d0e030ce1367606c5f08
java生产:
375c52fd202696dba679e57f612ee95e707ccb05aff368b62b2802d5fb685403


有人能帮我修改代码吗?

我认为算法是以稍微不同的方式构建的和/或salt键是以不同的方式进行解释的。

我认为算法是以稍微不同的方式构建的和/或salt键是以不同的方式进行解释的。

在Java代码中,您不使用IV

我对C语言不够了解,无法直接帮助您,但我可以提供一些信息

Rijndael又名“AES”,对16字节的数据块进行加密。要加密长消息(例如,在编码时,测试消息的长度为20字节),必须多次调用Rijndael,以某种方式将调用链接在一起(此外,还有一些“填充”,以确保输入长度是16的倍数)。CBC模式执行这种链接

在CBC中,每个数据块在自身加密之前与先前加密的块组合(按位异或)。由于第一个数据块没有以前的数据块,我们添加了一个新的传统“第零个数据块”,称为IV。IV应选择为16个随机字节。解密方将需要IV。IV不需要是秘密的(这是IV和密钥之间的区别),因此它通常沿着消息传输

在Java代码中,不指定IV,只创建一个名为
IV
的变量,不使用它。因此Rijndael的实现是独立的。很可能它生成了一个随机IV。类似地,在C#代码中,您不会给Rijndael实现一个IV。因此,再次随机选择静脉注射是很有可能的。但与Java代码中的不一样,因此结果不同


(注意:您的20字节输入字符串被填充为32字节。您给出了两个十六进制的“结果”,每个长度为32字节。这是一致的,但意味着这些结果不包括IV,否则它们将是48字节长。)

在Java代码中,您不使用IV

我对C语言不够了解,无法直接帮助您,但我可以提供一些信息

Rijndael又名“AES”,对16字节的数据块进行加密。要加密长消息(例如,在编码时,测试消息的长度为20字节),必须多次调用Rijndael,以某种方式将调用链接在一起(此外,还有一些“填充”,以确保输入长度是16的倍数)。CBC模式执行这种链接

在CBC中,每个数据块在自身加密之前与先前加密的块组合(按位异或)。由于第一个数据块没有以前的数据块,我们添加了一个新的传统“第零个数据块”,称为IV。IV应选择为16个随机字节。解密方将需要IV。IV不需要是秘密的(这是IV和密钥之间的区别),因此它通常沿着消息传输

在Java代码中,不指定IV,只创建一个名为
IV
的变量,不使用它。因此Rijndael的实现是独立的。很可能它生成了一个随机IV。类似地,在C#代码中,您不会给Rijndael实现一个IV。因此,再次随机选择静脉注射是很有可能的。但与Java代码中的不一样,因此结果不同

(注意:您的20字节输入字符串被填充为32字节。您给出了两个十六进制的“结果”,每个长度为32字节。这是一致的,但意味着这些结果不包括IV,否则它们将是48字节长。)

string              keystr         = "0123456789abcdef0123456789abcdef";
string              plainText   = "www.bouncycastle.org";
  RijndaelManaged crypto = new RijndaelManaged();

  crypto.KeySize = 128;
  crypto.Mode = CipherMode.CBC;
  crypto.Padding = PaddingMode.PKCS7;
  crypto.Key = keystr.ToCharArray().Select(c=>(byte)c).ToArray();
  // get the IV and key for writing to a file
  byte[] iv = crypto.IV;
  byte[] key = crypto.Key;


  // turn the message into bytes
  // use UTF8 encoding to ensure that Java can read in the file properly
  byte[] plainBytes = Encoding.UTF8.GetBytes(plainText.ToCharArray());

  // Encrypt the Text Message using AES (Rijndael) (Symmetric algorithm)
  ICryptoTransform sse = crypto.CreateEncryptor();
  MemoryStream encryptedFs = new MemoryStream();
  CryptoStream cs = new CryptoStream(encryptedFs, sse, CryptoStreamMode.Write);
  try
  {
    cs.Write(plainBytes, 0, plainBytes.Length);
    cs.FlushFinalBlock();
    encryptedFs.Position = 0;

    string result = string.Empty;
    for (int i = 0; i < encryptedFs.Length; i++)
    {
      int read = encryptedFs.ReadByte();
      result += read.ToString("x2");  
    }

  }
  catch (Exception e)
  {
    Console.WriteLine(e.Message);

  }
  finally
  {
    encryptedFs.Close();
    cs.Close();

  }
}
private String              key         = "0123456789abcdef0123456789abcdef";
private String              plainText   = "www.bouncycastle.org";

cipherText = performEncrypt(Hex.decode(key.getBytes()), plainText);

private byte[] performEncrypt(byte[] key, String plainText)
{
    byte[] ptBytes = plainText.getBytes();
    final RijndaelEngine rijndaelEngine = new RijndaelEngine();


    cipher = new PaddedBufferedBlockCipher(new CBCBlockCipher(rijndaelEngine));

    String name = cipher.getUnderlyingCipher().getAlgorithmName();
    message("Using " + name);
    byte[]iv = new byte[16];
    final KeyParameter keyParameter = new KeyParameter(key);

    cipher.init(true, keyParameter);



    byte[] rv = new byte[cipher.getOutputSize(ptBytes.length)];

    int oLen = cipher.processBytes(ptBytes, 0, ptBytes.length, rv, 0);
    try
    {
        cipher.doFinal(rv, oLen);
    }
    catch (CryptoException ce)
    {
        message("Ooops, encrypt exception");
        status(ce.toString());
    }
    return rv;
}