我的老板要我加密数据传输过程中使用的一些信息.要加密的各个字符串长度在8到20个字符之间.必须使用单个密码进行加密和解密,因此我需要一个对称的算法.我不想自己动手 - 我想使用C#中内置的.NET.
那么,哪种算法最好?
加密是使用Stanford Javascript Crypto Library(SJCL)完成的.下面是一个完整的加密示例,分为两部分.第一个是关于PBKDF2的基于密码的密钥派生.在第二部分中,使用派生密钥和初始化向量(IV)进行实际加密.请注意,salt和IV是硬编码的,因此更容易提供C#解密解决方案.
// Key derivation…
var password = "password";
var salt = sjcl.codec.hex.toBits(
"5f9bcef98873d06a" // Random generated with sjcl.random.randomWords(2, 0);
); // Hex encoded with sjcl.codec.hex.toBits(randomSalt);
var iterations = 1000;
var keySize = 128;
var encryptionKey = sjcl.misc.pbkdf2(password, salt, iterations, keySize);
// Encryption…
var blockCipher = new sjcl.cipher.aes(encryptionKey);
var plainText = sjcl.codec.utf8String.toBits("secret");
var iv = sjcl.codec.hex.toBits("8291ff107e798a29");
var adata = ""; // What is adata?
var tag = 64; // What is …Run Code Online (Sandbox Code Playgroud) 我想在ASP.NET中混淆一个查询字符串参数.该站点将有大量请求,因此算法不应该太慢.
我的问题是我找到的所有算法都会产生不需要的字符(比如+/=)
这是我想要实现的一个例子:
www.domain.com/?id=1844
Run Code Online (Sandbox Code Playgroud)
至
www.domain.com/?id=3GQ5DTL3oVd91WsGj74gcQ
Run Code Online (Sandbox Code Playgroud)
混淆的参数应该只包括az和AZ以及0-9个字符.
我知道我可以使用base64进行加密,但这会生成不需要的字符,例如/or =或+.
知道可以使用什么算法吗?
更新: 我知道UrlEncoding,我想避免编码字符串.因为这会在网址中生成%F2或%B2等字符.
我有代码从字符串生成SHA512.
public static string GetCrypt(string text)
{
string hash = "";
SHA512 alg = SHA512.Create();
byte[] result = alg.ComputeHash(Encoding.UTF8.GetBytes(text));
hash = Encoding.UTF8.GetString(result);
return hash;
}
Run Code Online (Sandbox Code Playgroud)
现在我必须将hash转换回string.任何想法怎么做?谢谢. 我正在寻找创建自定义成员登录系统(用于学习),我无法找出C#命令来生成加密的哈希.
是否需要导入某个命名空间或类似的东西?
我有一个关于加密的问题:基本上在我的Web应用程序中我使用了Enterprise Library 5.0,它们有一个加密块,所以基本上在他们提供的配置工具中我已经注册了一个块并生成了一个密钥.这基本上在Web配置中添加了几行,因此稍后在Web应用程序中我可以执行以下操作:
Cryptographer.EncryptSymmetric("RijndaelManaged", text);
Cryptographer.DecryptSymmetric("RijndaelManaged", text);
Run Code Online (Sandbox Code Playgroud)
这将自动加密和正确解密,没有任何问题.
现在我遇到了以下问题,我们正在从Enterprise Library 5.0迁移到Enterprise Library 6.0,在新版本中他们已经删除了Cryptography块,而是建议使用.Net加密.
所以我决定使用Rijndael .Net类用自定义代码替换这一行.我已经使用这个主题作为参考(加密和解密字符串),但用RijndaelManaged创建它,但我有点困惑,关键如何...因为一些数据已加密如何获取和使用相同的密钥能够解密数据并使用它......?
我打开了5.0版的配置管理器以查看密钥但是我可以使用它吗?
任何人都能详细说明这一个吗?
我正在寻找混淆以下c#/ silverlight源代码的方法:
if (searchBox.Text.Equals("string literal")){
MessageBox.Show("another string literal");
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我所能提出的隐藏它是将字符串编码为ascii的数组...
我想要的只是源代码不可读,这是一个复活节彩蛋.安全不是我的首要任务.
我不希望知道复活节彩蛋的存在.我试图混淆程序流程,所以它看起来不像是有一行代码
if (specialcase)
doEasterEgg();
Run Code Online (Sandbox Code Playgroud)
我已经看到了类似于混淆的c比赛的东西,其中hello world变成了globbidy gook.有什么类似人们知道的c#?
我需要加密和解密字符串值,例如电子邮件地址和数值,但加密的字符串中不应包含'/',因为我在URL中使用它并使用'/'作为分隔符来获取某些值.
我目前正在使用以下方法:
string passPhrase = "Pas5pr@se"; // can be any string
string saltValue = "s@1tValue"; // can be any string
string hashAlgorithm = "SHA1"; // can be "MD5"
int passwordIterations = 2; // can be any number
string initVector = "@1B2c3D4e5F6g7H8"; // must be 16 bytes
int keySize = 256; // can be 192 or 128
public string Encrypt(string plainText)
{
byte[] initVectorBytes = Encoding.ASCII.GetBytes(initVector);
byte[] saltValueBytes = Encoding.ASCII.GetBytes(saltValue);
byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText);
PasswordDeriveBytes password = new PasswordDeriveBytes(passPhrase,saltValueBytes,hashAlgorithm,passwordIterations);
byte[] keyBytes …Run Code Online (Sandbox Code Playgroud) 我研究了很多例子并尝试了几篇文章。但他们都没有解决我的问题。
我想加密数据库中的主列值(整数值)并将其显示在 URL 中。我希望我的 URL 简单易读,因此我不需要冗长的加密值。大多数情况下,我会查看 5 到 7 个字符的长度。
这可能吗 ?如果是这样,最好的方法是什么?
http://www.codeproject.com/Tips/306620/Encryption-Decryption-Function-in-Net-using-MD-Cry
c# ×9
encryption ×6
asp.net ×3
.net ×2
cryptography ×2
aes ×1
asp.net-mvc ×1
bouncycastle ×1
hash ×1
obfuscation ×1
security ×1
sha512 ×1
silverlight ×1
string ×1