在C#中满足以下内容的最现代(最佳)方式是什么?
string encryptedString = SomeStaticClass.Encrypt(sourceString);
string decryptedString = SomeStaticClass.Decrypt(encryptedString);
Run Code Online (Sandbox Code Playgroud)
但最小的涉及盐,键,与字节[]等混乱的大惊小怪等.
谷歌搜索和混淆我发现的东西(你可以看到类似的SO Q列表,看这是一个欺骗性的问题).
目前我用明文哎呀写它!,这是一个内部计划所以它并没有那么糟糕,但我想做得对.在写入注册表时我应该如何加密这个以及如何解密呢?
OurKey.SetValue("Password", textBoxPassword.Text);
Run Code Online (Sandbox Code Playgroud) 我写了一个简短的C++程序来对一个文件进行XOR加密,我可以将它用于一些个人文件(如果它被破解它没什么大不了的 - 我只是在防范偶然的观众).基本上,我使用ASCII密码并使用文件中的数据重复XOR密码.
但现在我很好奇:如果有人想破解这个问题,他们会怎么做呢?需要很长时间吗?它取决于密码的长度(即什么是大O)?
我需要一个可逆的哈希函数(显然输入的大小要小于输出),它以一种随机的方式将输入映射到输出.基本上,我想要一种方法将像"123"这样的数字转换为更大的数字,如"9874362483910978",但不是以保留比较的方式,所以如果x1> x2,f(x1)则不能总是如此)> f(x2)(但也不一定总是假).
对此的用例是我需要找到一种方法将小数字转换为更大的,随机的数字.它们实际上并不需要是随机的(事实上,它们需要是确定性的,所以相同的输入总是映射到相同的输出),但它们确实需要看起来是随机的(至少当base64编码为字符串时,所以移位Z位将无法工作,因为类似的数字将具有类似的MSB).
此外,简单(快速)计算和反转是一个加号,但不是必需的.
我不知道我是否清楚,或者是否存在这样的算法,但我会感激任何帮助!
我正在寻找一种简单的方法来使用固定密钥(将存储在我的配置中)加密和解密某些数据,并将结果存储为字符串(base16或hex).
就像是
string myString = "hello world";
string myKey = "k2k3aij3h";
string enc = new Algorithm().Encrypt(myString, myKey);
string dec = new Alrorithm().Decrypt(enc, myKey);
Run Code Online (Sandbox Code Playgroud) 我在C#中编写了一些AES加密代码,但我无法正确加密和解密.如果我输入"test"作为密码并且"此数据必须对每个人保密!" 我收到以下异常:
System.Security.Cryptography.CryptographicException: Padding is invalid and cannot be removed.
at System.Security.Cryptography.RijndaelManagedTransform.DecryptData(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount, Byte[]& outputBuffer, Int32 outputOffset, PaddingMode paddingMode, Boolean fLast)
at System.Security.Cryptography.RijndaelManagedTransform.TransformFinalBlock(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount)
at System.Security.Cryptography.CryptoStream.FlushFinalBlock()
at System.Security.Cryptography.CryptoStream.Dispose(Boolean disposing)
at System.IO.Stream.Close()
at System.IO.Stream.Dispose()
...
Run Code Online (Sandbox Code Playgroud)
如果我输入少于16个字符的东西,我就得不到输出.
我认为我需要对加密进行一些特殊处理,因为AES是一种分组密码,但我不确定究竟是什么,我无法在网上找到任何示例.这是我的代码:
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
public static class DatabaseCrypto
{
public static EncryptedData Encrypt(string password, string data)
{
return DatabaseCrypto.Transform(true, password, data, null, null) as EncryptedData;
}
public static string Decrypt(string password, EncryptedData …Run Code Online (Sandbox Code Playgroud) 我们有一个网站,用户将在我们的数据库中保存极其个人和敏感的数据.
我们当然需要在将这些数据存储到数据库之前加密,并使用SSL.它是一个使用表单身份验证的MVC应用程序.确保从我们保存数据到解密显示在其个人页面上之前加密此数据的最佳方法是什么.
我们还需要确保即使是我们的开发人员和dba在应用程序上工作也是安全的.
处理这种情况的最佳方法是什么?
我的组织决定加密我们数据库中的某些数据,并且我已经完成了实施加密的任务.我需要能够加密数据,将加密版本存储在我们数据库的VARCHAR字段中,然后检索它并将其解密回其通常状态.
从表面上看,这似乎是一项简单的任务.有许多方法可以实现加密.我之前使用过的是基于StackOverflow问题中的AES加密代码.
在这种情况下更难的是,我需要编写代码来加密/解密访问我们数据库的各种应用程序中的数据,其中一些应用程序是使用不同的技术开发的.我们有使用Coldfusion 5,Classic ASP和ASP.NET 2.0编写的应用程序.我需要能够使用Coldfusion代码加密数据并将其存储在数据库中,然后在ASP.NET中读取并解密回原始形式.或者在Classic ASP中加密它并在Coldfusion中解密它.或者这些平台的任何其他组合.
事实证明这比我预期的要难.声称使用相同算法的不同类/对象/函数/库似乎产生不同的结果,即使给定相同的数据和相同的共享秘密.过去,我们使用CAPICOM在Coldfusion和Classic ASP之间提供加密互操作性.但是我试图让它在ASP.NET中工作时遇到了麻烦.我已经阅读了这篇关于如何让CAPICOM在.NET中工作的文章,但这些建议并没有对我有用.我甚至无法生成一个interop类或导入COM对象的引用而不会出现错误.此外,我们的一些生产服务器的操作系统似乎与CAPICOM不兼容,因此无论如何这可能都是死路一条.
有没有人对如何实现加密有任何建议,以至于3个平台中的任何一个都可以解密其他人加密的内容,同时仍然使用相当强大的算法?
编辑2011-12-29:
如下面的评论所述,我目前希望找到一个与我们现有的使用CAPICOM的Coldfusion/ASP Classic代码兼容的ASP.NET解决方案.这样做的原因是我们的团队负责人不希望我为我们当前的目的在我们的代码中引入新的加密方法,除非我还使用加密修改我们的旧应用程序以用于不同的目的以使用相同的方法.他想为两种目的使用相同的加密方法.由于修改我们的旧应用程序以使用新的加密方法不仅意味着更改代码,还要跟踪旧应用程序加密的所有数据,解密并使用新方法重新加密,我犹豫不决除非我必须这样做.希望我能找到一种让ASP.NET读取现有加密数据的方法.
来自我们其他Coldfusion和ASP Classic应用程序的加密数据使用CAPICOM COM对象进行编码.据我所知,这些设置一般都是AES加密,最大密钥大小(我相信在AES中是256位).
在@ Leigh的请求下,这是我们现有的CF应用程序如何使用CAPICOM的简化示例:
<cfscript>
encryptObject = CreateObject("com","CAPICOM.EncryptedData");
encryptObject.Algorithm.Name = 4; // 4 is AES
encryptObject.Algorithm.KeyLength = 0; // 0 is MAX, I believe 256-bit in the case of AES
encryptObject.SetSecret(sharedSecret);
encryptObject.Content = stringToEncrypt;
encryptedData = localScope.encryptObject.Encrypt();
</cfscript>
Run Code Online (Sandbox Code Playgroud) c# ×6
encryption ×6
.net ×4
cryptography ×3
security ×2
aes ×1
asp-classic ×1
asp.net ×1
asp.net-mvc ×1
coldfusion ×1
hash ×1
mono ×1
passwords ×1
python ×1
random ×1
xor ×1