相关疑难解决方法(0)

字符串到 byte[] 数组,反之亦然

我正在实现自己的 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) 用相应的字符串(要加密的字符串或要解密的字符串)填充字节数组。我究竟做错了什么??

c# encryption cryptography aes

2
推荐指数
1
解决办法
1651
查看次数

SHA计算随机长度的哈希值

最近,我注意到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()进行转换,这似乎是一个巨大的错误.

c# random hash cryptography sha

2
推荐指数
1
解决办法
400
查看次数

C#和Java中的十六进制到字节数组给出了不同的结果

首先,对于长篇文章感到抱歉,我想包括我的所有想法,以便你们更容易找到我的代码有什么问题.

我想将一个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)

c# java hex byte bytearray

2
推荐指数
1
解决办法
3390
查看次数

如何读取Active Directory对象的User-Parameters属性的内容?

我需要从Active Directory对象中提取一些信息,例如配置文件路径,或者用户是否被锁定.

我可以看到这些信息保存在Active Directory对象的User-Parameters属性中,但是该属性的值是一个难以理解的字符的错误字符串:

User-Parameters属性值的示例.

我可以看到另一个用户遇到了同样的问题,但是关于如何解析该属性还没有明确的解决方案.

如何在保持理智的同时提取我需要的数据?

c# active-directory

2
推荐指数
1
解决办法
1247
查看次数

.NET C# 中对象或其属性的确定性 UUID / 哈希

我需要一种方法来跨 .NET 框架/环境/执行一致地生成给定对象或对象属性子集的唯一 ID,同时最大限度地减少冲突。

  • 一遍又一遍地使用相同的属性应该总是产生相同的结果
  • 碰撞应该是最小的
  • 这些属性是字符串、整数和小数的混合
  • 属性值不是敏感数据
  • 不会添加或删除属性
  • 使用它的应用程序只是内部的(不向公众开放)
  • 我不想依赖 GetHashCode,它可能会因 .NET 框架/环境/执行而异,如andrewlock.net 上这篇精彩文章中所述
    • 他提出了一种可能的方法,但没有提供有关现实世界使用的太多信息

例如,给定一个固定对象,例如

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)

.net c# hash

2
推荐指数
1
解决办法
2966
查看次数

在web.config中存储一个字节数组

我有一个开发人员密钥

 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)

如果我能够轻松地做到这一点,我需要从存储的字符串中获取字节数组的代码?

c# asp.net

1
推荐指数
1
解决办法
3370
查看次数

ASP.NET中的加密,可以使用AES_DECRYPT()在MySQL中解密

我希望能够在ASP.NET中执行应用程序级加密,生成一个字节数组,然后将其保存到MySQL blob列.我希望它是一个选项,如果你有加密密钥,你将能够使用MySQL的AES_DECRYPT()函数解密它.这似乎应该是可能的,因为AES_DECRYPT是AES/Rijndael的实现.

MySQL AES_ENCRYPT/DECRYPT函数只需要一个密钥和字符串来加密/解密为参数.但是,我在ASP.NET/C#中看到的用于加密的示例还涉及指定Key和IV(初始化向量)的值.这些如何影响最终的加密字节数组,以及在使用AES_DECRYPT解密时如何将它们考虑在内?

c# mysql asp.net encryption encryption-symmetric

1
推荐指数
1
解决办法
969
查看次数

C# SHA256 散列与 Python 结果不同

我正在根据我找到的 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 字符串

任何帮助将不胜感激,谢谢。

c# python encryption cryptography sha256

1
推荐指数
1
解决办法
2324
查看次数

在Coldfusion中加密并在C#中解密

这是用于在coldfusion中加密的代码

<cfset strBase64Value = encrypt(strValue,24 character key,AES) />
Run Code Online (Sandbox Code Playgroud)

它产生的加密值714FEA9A9A2184769CA49D5133F08580对我来说似乎很奇怪,因为它只是大写和数字.

我应该用什么C#库来正确解密它?

同时查看此信息,默认情况下它似乎使用UUEncode算法进行编码.

我应该要求加密器使用Base64作为编码参数吗?

c# encryption coldfusion

1
推荐指数
1
解决办法
1407
查看次数

为字节数组插入生成sql脚本

我被要求为一组特定的操作(基本上是为电子商务门户插入产品信息)生成脚本,并执行生成的脚本。我面临的问题是我们将所有图像作为二进制数据存储在表中。现在我应该如何为此编写查询脚本,当我尝试以字符串的形式插入字节数组时,我遇到了类型不匹配。这是我尝试过的。

//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)

sql-server asp.net

1
推荐指数
1
解决办法
2327
查看次数