我正在实现自己的 AES 代码,在解密过程中遇到一些问题。
byte[] output;
output = Encrypt(EncryptBufferInput);//encrypt "12",output[] is 300532188151293E4ACA3BA529B821C1
str.Append(Encoding.ASCII.GetString(output) );
output = Decrypt(DecryptBufferInput);//in hex, DecryptBufferInput should be "300532188151293E4ACA3BA529B821C1"
str.Append(Encoding.ASCII.GetString(output));//does not decrypt back to "12"
Run Code Online (Sandbox Code Playgroud)
因此,如果我尝试加密“12”,它会给出十六进制形式的“300532188151293E4ACA3BA529B821C1”值。当我尝试将其解密回“12”时,它给了我一个错误的值,因为 DecryptBufferInput 不是“300532188151293E4ACA3BA529B821C1”,而是其他一些值......只有前几个值是相同的。EncryptBufferInput 和 DecryptBufferInput 都是 byte[] 数组,我使用 Encoding.ASCII.GetBytes(string) 用相应的字符串(要加密的字符串或要解密的字符串)填充字节数组。我究竟做错了什么??
最近,我注意到SHA算法计算随机长度的哈希值.
HashAlgorithm provider;
provider = HashAlgorithm.Create("System.Security.Cryptography.SHA256");
while(!stackoverflow) {
Console.WriteLine(Encoding.UTF8.GetString(
provider.ComputeHash(Encoding.UTF8.GetBytes(
(new Random()).Next().ToString())))
.Count().ToString());
}
Run Code Online (Sandbox Code Playgroud)
输出:
29
29
30
29
29
30
29
31
29
29
32
29
30
28
...
Run Code Online (Sandbox Code Playgroud)
是否可以设置最大哈希长度?(可能使哈希无用..)或者我在计算哈希值时做错了什么?编码?
编辑:
上面的代码片段就是一个例子.我最终需要的是一个接受字符串的方法,计算字符串的散列并返回它.HashAlgorithm.ComputeHash取字节并返回字节,所以我使用UTF8.GetBytes()/ UTF8.GetString()进行转换,这似乎是一个巨大的错误.
首先,对于长篇文章感到抱歉,我想包括我的所有想法,以便你们更容易找到我的代码有什么问题.
我想将一个Hex字符串从C#应用程序传输到Java应用程序.但是,当我在两种语言中将相同的十六进制值转换为字节数组时,输出是不同的.
例如,相同的十六进制值给出
[101, 247, 11, 173, 46, 74, 56, 137, 185, 38, 40, 191, 204, 104, 83, 154]
Run Code Online (Sandbox Code Playgroud)
在C#和
[101, -9, 11, -83, 46, 74, 56, -119, -71, 38, 40, -65, -52, 104, 83, -102]
Run Code Online (Sandbox Code Playgroud)
在Java中
以下是我在C#中使用的方法:
public static string ByteArrayToHexString(byte[] byteArray)
{
return BitConverter.ToString(byteArray).Replace("-",""); //To convert the whole array
}
public static byte[] HexStringToByteArray(string hexString)
{
byte[] HexAsBytes = new byte[hexString.Length / 2];
for (int index = 0; index < HexAsBytes.Length; index++)
{
string byteValue = hexString.Substring(index * …Run Code Online (Sandbox Code Playgroud) 我需要从Active Directory对象中提取一些信息,例如配置文件路径,或者用户是否被锁定.
我可以看到这些信息保存在Active Directory对象的User-Parameters属性中,但是该属性的值是一个难以理解的字符的错误字符串:

我可以看到另一个用户遇到了同样的问题,但是关于如何解析该属性还没有明确的解决方案.
如何在保持理智的同时提取我需要的数据?
我需要一种方法来跨 .NET 框架/环境/执行一致地生成给定对象或对象属性子集的唯一 ID,同时最大限度地减少冲突。
例如,给定一个固定对象,例如
public class ExampleObject
{
public string Prop1 { get; set; }
public string Prop2 { get; set; }
public int Prop3 { get; set; }
public decimal Prop4 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我正在考虑将所有值转换为字符串,连接它们,然后使用一些确定性算法来获得所需的结果
// Convert all values to strings and concat
string str1 = "a";
string str2 = "b";
int int1 = 1;
decimal dec1 = 1.2m;
string concatStr …Run Code Online (Sandbox Code Playgroud) 我有一个开发人员密钥
byte[] key = new Byte[]
{
0x01, 0x42, 0xA0, 0xE1, 0x5E, 0xEE, 0xA7, 0x01, 0x71, 0x9A, 0xCB, 0xAB, 0x58, 0xEB, 0xED, 0x44...
Run Code Online (Sandbox Code Playgroud)
我想存储在我的web.config中,我可以做如下的事情
<add key="spotify-devkey" value="0x01, 0x42, 0xA0, 0xE1, 0x5E, 0xEE, 0xA7, 0x01, 0x71, 0x9A, 0xCB, 0xAB, 0x58, 0xEB, 0xED, 0x44,...
Run Code Online (Sandbox Code Playgroud)
如果我能够轻松地做到这一点,我需要从存储的字符串中获取字节数组的代码?
我希望能够在ASP.NET中执行应用程序级加密,生成一个字节数组,然后将其保存到MySQL blob列.我希望它是一个选项,如果你有加密密钥,你将能够使用MySQL的AES_DECRYPT()函数解密它.这似乎应该是可能的,因为AES_DECRYPT是AES/Rijndael的实现.
MySQL AES_ENCRYPT/DECRYPT函数只需要一个密钥和字符串来加密/解密为参数.但是,我在ASP.NET/C#中看到的用于加密的示例还涉及指定Key和IV(初始化向量)的值.这些如何影响最终的加密字节数组,以及在使用AES_DECRYPT解密时如何将它们考虑在内?
我正在根据我找到的 Python 代码编写一个小程序。有几行我需要帮助。它是关于使用 SHA256 加密的值。
python代码如下:
first = hashlib.sha256((valueOne + valueTwo).encode()).hexdigest()
second = hashlib.sha256(str(timestamp) + value).encode()).hexdigest()
Run Code Online (Sandbox Code Playgroud)
当我执行它时,我的值如下:
first: 93046e57a3c183186e9e24ebfda7ca04e7eb4d8119060a8a39b48014d4c5172b
second: bde1c946749f6716fde713d46363d90846a841ad56a4cf7eaccbb33aa1eb1b70
Run Code Online (Sandbox Code Playgroud)
我的 C# 代码是:
string first = sha256_hash((secret + auth_token));
string second = sha256_hash((timestamp.ToString() + secret));
Run Code Online (Sandbox Code Playgroud)
当我执行它时,我的价值观是:
first: 9346e57a3c183186e9e24ebfda7ca4e7eb4d81196a8a39b48014d4c5172b
second: bde1c946749f6716fde713d46363d9846a841ad56a4cf7eaccbb33aa1eb1b70
Run Code Online (Sandbox Code Playgroud)
如您所见,这些值略有不同。python 代码返回两个长度为 64 个字符的值,其中在 C# 中,值分别为 60 个字符和 63 个字符。
我的 sha256_hash 方法来自这里:获取字符串的 SHA-256 字符串
任何帮助将不胜感激,谢谢。
这是用于在coldfusion中加密的代码
<cfset strBase64Value = encrypt(strValue,24 character key,AES) />
Run Code Online (Sandbox Code Playgroud)
它产生的加密值714FEA9A9A2184769CA49D5133F08580对我来说似乎很奇怪,因为它只是大写和数字.
我应该用什么C#库来正确解密它?
同时查看此信息,默认情况下它似乎使用UUEncode算法进行编码.
我应该要求加密器使用Base64作为编码参数吗?
我被要求为一组特定的操作(基本上是为电子商务门户插入产品信息)生成脚本,并执行生成的脚本。我面临的问题是我们将所有图像作为二进制数据存储在表中。现在我应该如何为此编写查询脚本,当我尝试以字符串的形式插入字节数组时,我遇到了类型不匹配。这是我尝试过的。
//imgbyte is the byte array containing the piucture data
StringBuilder sb=new StringBuilder();
sb.AppendLine("declare @picquery as Varchar(4000)");
sb.AppendLine("set @picquery='Insert into Picture(PictureBinary) values (''"+imgbyte.ToString() +"'')'");
sb.AppendLine("exec(@picquery)");
// sb is then passed to another module where it is executed.
Run Code Online (Sandbox Code Playgroud)
但是二进制数据的类型错误,插入查询失败。我究竟做错了什么。列 PictureBinary 是 VarBinary(MAX)
c# ×9
encryption ×4
asp.net ×3
cryptography ×3
hash ×2
.net ×1
aes ×1
byte ×1
bytearray ×1
coldfusion ×1
hex ×1
java ×1
mysql ×1
python ×1
random ×1
sha ×1
sha256 ×1
sql-server ×1