gpt4 book ai didi

c# - 如何找到与我的 C# 代码兼容的 Android 加密库或类?

转载 作者:行者123 更新时间:2023-12-01 14:02:41 25 4
gpt4 key购买 nike

我正在 C# .net 中使用以下类进行数据加密。 java android 中用于在 android 和 web 服务之间传输数据的等效库或算法是什么?

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Security.Cryptography;
using System.IO;
using System.Text;

/// <summary>
/// Summary description for Crypto
/// </summary>

public enum SymmProvEnum : int
{
DES, RC2, Rijndael
}
public class Crypto
{

string Globalkey = "test";
private SymmetricAlgorithm mobjCryptoService;

/// <remarks>
/// Constructor for using an intrinsic .Net SymmetricAlgorithm class.
/// </remarks>
public Crypto()
{
//switch (NetSelected)
//{
// case SymmProvEnum.DES:
// mobjCryptoService = new DESCryptoServiceProvider();
// break;
// case SymmProvEnum.RC2:
// mobjCryptoService = new RC2CryptoServiceProvider();
// break;
// case SymmProvEnum.Rijndael:
// mobjCryptoService = new RijndaelManaged();
// break;
//}
mobjCryptoService = new RijndaelManaged();
}

/// <remarks>
/// Constructor for using a customized SymmetricAlgorithm class.
/// </remarks>
//public Crypto(SymmetricAlgorithm ServiceProvider)
//{
// mobjCryptoService = ServiceProvider;
//}

/// <remarks>
/// Depending on the legal key size limitations of a specific CryptoService provider
/// and length of the private key provided, padding the secret key with space character
/// to meet the legal size of the algorithm.
/// </remarks>
private byte[] GetLegalKey(string Key)
{
string key = Globalkey;
string sTemp;
if (mobjCryptoService.LegalKeySizes.Length > 0)
{
int lessSize = 0, moreSize = mobjCryptoService.LegalKeySizes[0].MinSize;
// key sizes are in bits
while (Key.Length * 8 > moreSize)
{
lessSize = moreSize;
moreSize += mobjCryptoService.LegalKeySizes[0].SkipSize;
}
sTemp = Key.PadRight(moreSize / 8, ' ');
}
else
sTemp = Key;

// convert the secret key to byte array
return ASCIIEncoding.ASCII.GetBytes(sTemp);
}

public string Encrypt(string Source)
{
string Key = Globalkey;
byte[] bytIn = System.Text.ASCIIEncoding.ASCII.GetBytes(Source);
// create a MemoryStream so that the process can be done without I/O files
System.IO.MemoryStream ms = new System.IO.MemoryStream();

byte[] bytKey = GetLegalKey(Key);

// set the private key
mobjCryptoService.Key = bytKey;
mobjCryptoService.IV = bytKey;

// create an Encryptor from the Provider Service instance
ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor();

// create Crypto Stream that transforms a stream using the encryption
CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);

// write out encrypted content into MemoryStream
cs.Write(bytIn, 0, bytIn.Length);
cs.FlushFinalBlock();

// get the output and trim the '\0' bytes
byte[] bytOut = ms.GetBuffer();
int i = 0;
for (i = 0; i < bytOut.Length; i++)
if (bytOut[i] == 0)
break;

// convert into Base64 so that the result can be used in xml
return System.Convert.ToBase64String(bytOut, 0, i);
}

public string Decrypt(string Source)
{
string Key = Globalkey;
// convert from Base64 to binary
byte[] bytIn = System.Convert.FromBase64String(Source);
// create a MemoryStream with the input
System.IO.MemoryStream ms = new System.IO.MemoryStream(bytIn, 0, bytIn.Length);

byte[] bytKey = GetLegalKey(Key);

// set the private key
mobjCryptoService.Key = bytKey;
mobjCryptoService.IV = bytKey;

// create a Decryptor from the Provider Service instance
ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor();

// create Crypto Stream that transforms a stream using the decryption
CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);

// read out the result from the Crypto Stream
System.IO.StreamReader sr = new System.IO.StreamReader( cs );
return sr.ReadToEnd();
}
}

最佳答案

我编写了一个加密类,如果配置正确,它应该可以与您的代码一起使用。

您可以在这里查看:https://github.com/Untouchab1e/yubinotes/blob/master/Android/src/com/connectutb/yubinotes/util/Crypto.java

您在示例中使用 DES,这是一种有缺陷且过时的算法(或者使用 3DES),因此我建议改用 AES,它提供更好的加密。

关于c# - 如何找到与我的 C# 代码兼容的 Android 加密库或类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19223325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com