相关疑难解决方法(0)

如何将字节数组转换为十六进制字符串,反之亦然?

如何将字节数组转换为十六进制字符串,反之亦然?

c# arrays hex

1313
推荐指数
24
解决办法
81万
查看次数

我应该选择哪种加密哈希函数?

.NET框架附带了6种不同的散列算法:

  • MD5:16字节(哈希时间500MB:1462毫秒)
  • SHA-1:20个字节(1644毫秒)
  • SHA256:32字节(5618毫秒)
  • SHA3​​84:48字节(3839毫秒)
  • SHA512:64字节(3820毫秒)
  • RIPEMD:20个字节(7066毫秒)

每个功能都有不同的表现; MD5是最快的,RIPEMD是最慢的.

MD5的优势在于它适用于内置的Guid类型; 它是3型UUID的基础.SHA-1哈希是类型5 UUID的基础.这使得它们非常易于识别.

然而,MD5易受碰撞攻击,SHA-1也容易受到攻击,但程度较轻.

在什么条件下我应该使用哪种散列算法?

我真的很想回答的具体问题是:

  • MD5不值得信任吗?在正常情况下,当您使用没有恶意意图的MD5算法且没有任何第三方有任何恶意意图时,您会期望任何冲突(意味着两个任意byte []产生相同的哈希)

  • RIPEMD比SHA1好多少?(如果它更好)它的计算速度要慢5倍,但散列大小与SHA1相同.

  • 散列文件名(或其他短字符串)时获得非恶意冲突的几率是多少?(例如,2个具有相同MD5哈希值的随机文件名)(使用MD5/SHA1/SHA2xx)一般来说,非恶意冲突的几率是多少?

这是我使用的基准:

    static void TimeAction(string description, int iterations, Action func) {
        var watch = new Stopwatch();
        watch.Start();
        for (int i = 0; i < iterations; i++) {
            func();
        }
        watch.Stop();
        Console.Write(description);
        Console.WriteLine(" Time Elapsed {0} ms", watch.ElapsedMilliseconds);
    }

    static byte[] GetRandomBytes(int count) {
        var bytes = new byte[count];
        (new Random()).NextBytes(bytes);
        return bytes;
    }


    static void …
Run Code Online (Sandbox Code Playgroud)

.net c# hash cryptography cryptographic-hash-function

135
推荐指数
3
解决办法
7万
查看次数

如何将System.Windows.Media.Color对象序列化为sRGB字符串?

我需要将WPF应用程序中使用的颜色序列化到数据库.我想使用sRGB值,因为他们对我们这些在过去几年中进行Web开发的人更熟悉.

如何从System.Windows.Media.Color对象获取ARGB字符串(如#FFFFFFFF)?

更新:我被MSDN上的文档误导了.正如下面提到的@Kris,该ToString()方法的文档不正确.虽然它说ToString()"使用ScRGB通道创建颜色的字符串表示",但如果使用该FromARGB()方法创建颜色,它实际上将返回ARGB十六进制格式的字符串.我想这是一个没有文档记录的功能.

请参阅http://msdn.microsoft.com/en-us/library/ms606572.aspx

wpf serialization colors

15
推荐指数
3
解决办法
1万
查看次数

为什么我的PHP SHA256哈希不等同于C#SHA256Managed哈希

为什么这些不一样?

PHP:

    $hash = hash('sha256', $userData['salt'] . hash('sha256', $password) );
Run Code Online (Sandbox Code Playgroud)

C#

    public static string ComputeHash(string plainText, string salt)
    {
        // Convert plain text into a byte array.
        byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText);
        byte[] saltBytes = Encoding.UTF8.GetBytes(salt);

        SHA256Managed hash = new SHA256Managed();

        // Compute hash value of salt.
        byte[] plainHash = hash.ComputeHash(plainTextBytes);

        byte[] concat = new byte[plainHash.Length + saltBytes.Length];

        System.Buffer.BlockCopy(saltBytes, 0, concat, 0, saltBytes.Length);
        System.Buffer.BlockCopy(plainHash, 0, concat, saltBytes.Length, plainHash.Length);

        byte[] tHashBytes = hash.ComputeHash(concat);

        // Convert result into a base64-encoded string.
        string hashValue …
Run Code Online (Sandbox Code Playgroud)

php c# sha256

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

如何编码Azure存储表行键和分区键?

我正在使用Azure存储表,我有数据进入RowKey,其中包含斜杠.根据此MSDN页面,PartitionKey和RowKey中不允许使用以下字符:

  • 正斜杠(/)字符

  • 反斜杠()字符

  • 数字符号(#)字符

  • 问号(?)字符

  • 控制字符从U + 0000到U + 001F,包括:

  • 水平制表符(\ t)字符

  • 换行符(\n)字符

  • 回车(\ r)字符

  • 控制字符从U + 007F到U + 009F

我见过有些人使用URL编码来解决这个问题.不幸的是,这可能会产生一些问题,例如能够插入但无法删除某些实体.我也看到有些人使用base64编码,但是这也可以包含不允许的字符.

如何在不运行不允许的字符或滚动自己的编码的情况下有效编码RowKey?

.net c# encoding azure azure-storage

13
推荐指数
2
解决办法
4944
查看次数

在C#中生成XML文档哈希

在C#中散列XML文档的最佳方法是什么?我想散列一个XML文档,以便我可以判断它是否从生成时手动更改.我没有使用它来保证安全性 - 如果有人更改XML并更改哈希值以匹配,则可以.

例如,我会对根的子节点进行哈希并将哈希存储为根的属性:

<RootNode Hash="abc123">
    <!-- Content to hash here -->
</RootNode>
Run Code Online (Sandbox Code Playgroud)

c# xml hash canonicalization

10
推荐指数
2
解决办法
8961
查看次数

将字节数组转换为int

我试图在C#中进行一些转换,我不知道如何做到这一点:

private int byteArray2Int(byte[] bytes)
{
    // bytes = new byte[] {0x01, 0x03, 0x04};

    // how to convert this byte array to an int?

    return BitConverter.ToInt32(bytes, 0); // is this correct? 
    // because if I have a bytes = new byte [] {0x32} => I got an exception
}

private string byteArray2String(byte[] bytes)
{
   return System.Text.ASCIIEncoding.ASCII.GetString(bytes);

   // but then I got a problem that if a byte is 0x00, it show 0x20
}
Run Code Online (Sandbox Code Playgroud)

谁能给我一些想法?

c#

10
推荐指数
1
解决办法
3万
查看次数

Base64String和十六进制之间的转换

我在我的C++/CLI项目中使用ToBase64String了一个字符串,就像/MnwRx7kRZEQBxLZEkXndA==我想将这个字符串转换为十六进制表示,我怎样才能在C++/CLI或C#中做到这一点?

.net c# hex c++-cli

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

SHA256给出44长度输出而不是64长度

我正在使用以下代码来执行SHA256.

public static string GenerateSaltedHash(string plainTextString, string saltString)        
        {            
            byte[] salt = Encoding.UTF8.GetBytes(saltString);
            byte[] plainText = Encoding.UTF8.GetBytes(plainTextString);
            HashAlgorithm algorithm = new SHA256Managed();

            byte[] plainTextWithSaltBytes =
              new byte[plainText.Length + salt.Length];

            for (int i = 0; i < plainText.Length; i++)
            {
                plainTextWithSaltBytes[i] = plainText[i];
            }
            for (int i = 0; i < salt.Length; i++)
            {
                plainTextWithSaltBytes[plainText.Length + i] = salt[i];
            }
            byte[] bytes = algorithm.ComputeHash(plainTextWithSaltBytes);
            return Convert.ToBase64String(algorithm.ComputeHash(plainTextWithSaltBytes));                              
        }
Run Code Online (Sandbox Code Playgroud)

由于我使用SHA256,预期结果长度为64.但是我得到了44的结果.问题是什么?44长度输出会影响安全质量吗?

c# sha256

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

从字节数组转换为字符串hex c#

假设我有字节数组.

byte[] a = new byte[] {0x33,0x43,0xFE};
Run Code Online (Sandbox Code Playgroud)

我想把它转换成string.

 string str = convert(a);  
Run Code Online (Sandbox Code Playgroud)

我的str应该是这样的:

"33 43 FE"
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

c# arrays string byte

4
推荐指数
2
解决办法
7890
查看次数

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#应用程序,该应用程序使用加密文本并在文本框中显示结果,System.Security.Cryptography.Rijndael以便接收方复制结果并使用相同的密钥对其进行解密。

当我将加密的文本从EncryptStringToBytes函数返回的byte []转换为可以在textBox中显示的字符串以便以后复制和解密时,就会发生问题。

我使用了以下转换方法,但是没有一个方法能够显示有意义的字符串,以后可以将其用于解密,并且可以将其重新转换为先前从返回的原始字节形状EncryptStringToBytes

以下是用于执行转换的方法:

从byte []转换为字符串以便在文本框中显示:

textBox3.Text = Encoding.Default.GetString(encryptionResult)
Run Code Online (Sandbox Code Playgroud)

从文本框复制的字符串转换为byte []以便作为参数发送给它DecryptStringFromBytes,以完成解密过程:

byte[] textToByte = Encoding.Default.GetBytes(textToDecrypt)
Run Code Online (Sandbox Code Playgroud)

c# encryption aes rijndael

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

SHA1编码在C#中无法正常工作

我有以下字符串: TheString = 12424$456$06$4539527688361959$2017$188.98.78.191$

我想要该字符串的SHA1哈希,为此我使用以下代码:

string TheSHA1Hash = BitConverter.ToString(new SHA1Managed().ComputeHash(Encoding.UTF8.GetBytes(TheString)));
Run Code Online (Sandbox Code Playgroud)

这是输出:

8F-BA-36-2C-FC-DE-31-B2-AC-66-07-37-2D-80-85-63-5A-33-35-F4
Run Code Online (Sandbox Code Playgroud)

当我访问http://www.sha1-online.com/并散列字符串时,这是输出,这就是我想要的:

8fba362cfcde31b2ac6607372d8085635a3335f4
Run Code Online (Sandbox Code Playgroud)

它看起来一样,但不一样.如何获得我想要的输出?

c#

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