- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在为某些数据寻找非常简单的混淆(如加密和解密但不一定安全)功能。这不是关键任务。我需要一些东西让诚实的人保持诚实,但比 ROT13 强一点的东西或 Base64 .
我更喜欢 .NET 中已经包含的内容framework 2.0,所以我不必担心任何外部依赖。
我真的不想弄乱公钥/私钥等。我对加密知之甚少,但我知道我写的任何东西都不会毫无值(value)......事实上,我可能会搞砸数学,让它变得微不足道。
最佳答案
这里的其他答案工作正常,但 AES 是一种更安全和最新的加密算法。这是我几年前获得的一个类,用于执行 AES 加密,我随着时间的推移对其进行了修改,以便对 Web 应用程序更加友好(例如,我已经构建了使用 URL 友好字符串的加密/解密方法)。它还具有处理字节数组的方法。
注意:您应该在 Key(32 字节)和 Vector(16 字节)数组中使用不同的值!您不希望别人通过假设您按原样使用此代码来找出您的 key !您所要做的就是更改 Key 和 Vector 数组中的一些数字(必须 <= 255)(我在 Vector 数组中留下了一个无效值以确保您这样做...)。您可以使用 https://www.random.org/bytes/轻松生成新集:
使用它很简单:只需实例化类,然后(通常)调用 EncryptToString(string StringToEncrypt) 和 DecryptString(string StringToDecrypt) 作为方法。一旦您拥有此类,它就不会变得更容易(或更安全)。
using System;
using System.Data;
using System.Security.Cryptography;
using System.IO;
public class SimpleAES
{
// Change these keys
private byte[] Key = __Replace_Me__({ 123, 217, 19, 11, 24, 26, 85, 45, 114, 184, 27, 162, 37, 112, 222, 209, 241, 24, 175, 144, 173, 53, 196, 29, 24, 26, 17, 218, 131, 236, 53, 209 });
// a hardcoded IV should not be used for production AES-CBC code
// IVs should be unpredictable per ciphertext
private byte[] Vector = __Replace_Me__({ 146, 64, 191, 111, 23, 3, 113, 119, 231, 121, 2521, 112, 79, 32, 114, 156 });
private ICryptoTransform EncryptorTransform, DecryptorTransform;
private System.Text.UTF8Encoding UTFEncoder;
public SimpleAES()
{
//This is our encryption method
RijndaelManaged rm = new RijndaelManaged();
//Create an encryptor and a decryptor using our encryption method, key, and vector.
EncryptorTransform = rm.CreateEncryptor(this.Key, this.Vector);
DecryptorTransform = rm.CreateDecryptor(this.Key, this.Vector);
//Used to translate bytes to text and vice versa
UTFEncoder = new System.Text.UTF8Encoding();
}
/// -------------- Two Utility Methods (not used but may be useful) -----------
/// Generates an encryption key.
static public byte[] GenerateEncryptionKey()
{
//Generate a Key.
RijndaelManaged rm = new RijndaelManaged();
rm.GenerateKey();
return rm.Key;
}
/// Generates a unique encryption vector
static public byte[] GenerateEncryptionVector()
{
//Generate a Vector
RijndaelManaged rm = new RijndaelManaged();
rm.GenerateIV();
return rm.IV;
}
/// ----------- The commonly used methods ------------------------------
/// Encrypt some text and return a string suitable for passing in a URL.
public string EncryptToString(string TextValue)
{
return ByteArrToString(Encrypt(TextValue));
}
/// Encrypt some text and return an encrypted byte array.
public byte[] Encrypt(string TextValue)
{
//Translates our text value into a byte array.
Byte[] bytes = UTFEncoder.GetBytes(TextValue);
//Used to stream the data in and out of the CryptoStream.
MemoryStream memoryStream = new MemoryStream();
/*
* We will have to write the unencrypted bytes to the stream,
* then read the encrypted result back from the stream.
*/
#region Write the decrypted value to the encryption stream
CryptoStream cs = new CryptoStream(memoryStream, EncryptorTransform, CryptoStreamMode.Write);
cs.Write(bytes, 0, bytes.Length);
cs.FlushFinalBlock();
#endregion
#region Read encrypted value back out of the stream
memoryStream.Position = 0;
byte[] encrypted = new byte[memoryStream.Length];
memoryStream.Read(encrypted, 0, encrypted.Length);
#endregion
//Clean up.
cs.Close();
memoryStream.Close();
return encrypted;
}
/// The other side: Decryption methods
public string DecryptString(string EncryptedString)
{
return Decrypt(StrToByteArray(EncryptedString));
}
/// Decryption when working with byte arrays.
public string Decrypt(byte[] EncryptedValue)
{
#region Write the encrypted value to the decryption stream
MemoryStream encryptedStream = new MemoryStream();
CryptoStream decryptStream = new CryptoStream(encryptedStream, DecryptorTransform, CryptoStreamMode.Write);
decryptStream.Write(EncryptedValue, 0, EncryptedValue.Length);
decryptStream.FlushFinalBlock();
#endregion
#region Read the decrypted value from the stream.
encryptedStream.Position = 0;
Byte[] decryptedBytes = new Byte[encryptedStream.Length];
encryptedStream.Read(decryptedBytes, 0, decryptedBytes.Length);
encryptedStream.Close();
#endregion
return UTFEncoder.GetString(decryptedBytes);
}
/// Convert a string to a byte array. NOTE: Normally we'd create a Byte Array from a string using an ASCII encoding (like so).
// System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
// return encoding.GetBytes(str);
// However, this results in character values that cannot be passed in a URL. So, instead, I just
// lay out all of the byte values in a long string of numbers (three per - must pad numbers less than 100).
public byte[] StrToByteArray(string str)
{
if (str.Length == 0)
throw new Exception("Invalid string value in StrToByteArray");
byte val;
byte[] byteArr = new byte[str.Length / 3];
int i = 0;
int j = 0;
do
{
val = byte.Parse(str.Substring(i, 3));
byteArr[j++] = val;
i += 3;
}
while (i < str.Length);
return byteArr;
}
// Same comment as above. Normally the conversion would use an ASCII encoding in the other direction:
// System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
// return enc.GetString(byteArr);
public string ByteArrToString(byte[] byteArr)
{
byte val;
string tempStr = "";
for (int i = 0; i <= byteArr.GetUpperBound(0); i++)
{
val = byteArr[i];
if (val < (byte)10)
tempStr += "00" + val.ToString();
else if (val < (byte)100)
tempStr += "0" + val.ToString();
else
tempStr += val.ToString();
}
return tempStr;
}
}
关于c# - 简单的不安全双向数据 "obfuscation"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/165808/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提出有关书籍、工具、软件库等建议的问题。您可以编辑问题,以便可以用事实和引用来回答它。 7年前关
我有一个项目是另一个项目的一部分。我正在使用 maven 构建过程来制作项目的 jar。我使用 ProGuard 来混淆它。我有一些处理 UI 请求的 Controller 。 问。我的问题是未混
.Net security noob here...阻止其他人加载我的程序集的最简单方法是什么? 背景:虽然我真的在寻找“足够好”的保护(有足够的时间/金钱/聪明,有人可以成功破解、破解和攻击),但这
当我混淆我的应用程序时,防病毒软件会为混淆后的应用程序提供病毒警报。 我该怎么做才能避免这种情况? 我在Windows XP Professional上使用Visual Studio 2008和.NE
这是我们都必须在某个时候考虑的问题。 经过多年和许多方法后,我倾向于总体上同意以下声明: “对于任何几百人使用的 protected 软件,都可以找到破解版。到目前为止,每个保护方案都可以被篡改。”
我想试试这个程序,但我不知道如何使用它。 我在作者的网站上搜索过 https://github.com/yck1509/ConfuserEx但是对于像我这样的编程新手来说,这个网站上的例子还不够清楚。
你以前混淆过你的代码吗?是否有正当理由这样做? 最佳答案 我混淆了我的 JavaScript。它使它更小,从而减少了下载时间。此外,由于代码是交给客户的,我的公司不希望他们能够阅读它。 关于obfus
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
因此,在下面的代码中,您会注意到注释“//This item is obfuscated and can't be translation.”。 我想知道的是,这是否意味着该注释代替了一些混淆代码,后
我正在编译的网站上尝试使用 SmartAssembly 混淆工具。它适用于大多数代码,但 App_Code 中的任何类都不会被混淆。例如我在 App_Code 中有以下类(class) public
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: What is the Java ?: operator called and what does it do? 我
是否有任何工具或 TypeScript 分支支持公共(public)命名空间混淆? IE。转向: class MyUtil { print(): void { ... } } 变成这样的东西:
我正在为某些数据寻找非常简单的混淆(如加密和解密但不一定安全)功能。这不是关键任务。我需要一些东西让诚实的人保持诚实,但比 ROT13 强一点的东西或 Base64 . 我更喜欢 .NET 中已经包含
在基于 NetBeans Platform 7.2 的应用程序中,可以用这段代码替换 ModuleInstall 类: import org.openide.modules.OnStart; impo
我目前正在开发一个网站,我在其中包含了一个过滤器,该过滤器试图混淆它所服务的网页中存在的任何电子邮件地址。 就像现在一样,它将地址转换为图像。 我还看到了其他一些正在使用的方法;有些人将地址拆分为字符
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想改善这个问题吗?更新问题,以使为on-topic。 4
我想要一个免费的命令行应用程序或 Java 应用程序,可以在我的 JavaScript 文件之一上运行并对其进行混淆。我更喜欢在本地在 Visual Studio 中编译网站时运行它,但它可以是本地运
有谁知道是否有支持模块化混淆的 JS 混淆器? 我基本上希望将大约 1000 个 JS 文件最小化为 5 或 10 个混淆的 JS 模块。 这样做的主要原因是我可以继续修补我的应用程序(而不是重新部署
假设我有一个包含 2 列的 Access 数据库表:一列是 ID(从 1 到 20000,按顺序且每列都是唯一的),一列是值(从 0 到 500 的任何数字)。 如何以简单但有些有效的方式混淆值字段(
我被要求帮助混淆一个将分发给客户的库(用 C++ 编写)。我已经讨论了为什么混淆不一定是一个好主意,并且鉴于许可将集成到软件中,许多关于复制保护的担忧都没有实际意义。 无论如何,我还是被要求研究方法。
我是一名优秀的程序员,十分优秀!