dqzve68846 2016-02-26 17:35
浏览 131
已采纳

CSharp中的密码代码类似于Go(AES,CFB,XorKeyStream)中的代码

I have cryptographic code in Go but I can't hard find similar code in CSharp. I am debating to make my own implementation of XorKeyStream but I am told that there is legal issue if I write my own cryptographic code. I am sure there must be similar code in CSharp.

package main

import (
    "crypto/aes"
    "crypto/cipher"
    "fmt"
)

func main() {

    k1 := []byte("0123456789abcdef")
    r1 := []byte("1234567890abcdef")
    data := []byte("0123456789")
    fmt.Printf("original %x %s
", data, string(data))

    {
        block, _ := aes.NewCipher(k1)
        stream := cipher.NewCFBEncrypter(block, r1)
        stream.XORKeyStream(data, data)
        fmt.Printf("crypted %x
", data)
    }
    {
        block, _ := aes.NewCipher(k1)
        stream := cipher.NewCFBDecrypter(block, r1)
        stream.XORKeyStream(data, data)
        fmt.Printf("decrypted %x %s
", data, string(data))
    }

}

http://play.golang.org/p/EnJ56dYX_-

output

original 30313233343536373839 0123456789
crypted 762b6dcea9c2a7460db7
decrypted 30313233343536373839 0123456789

PS Some people marked that question as possible duplicate of question: "C# AES: Encrypt a file causes “Length of the data to encrypt is invalid.” error" I look for identical code in CSharp for existing code in Go. That question is about padding. This algorithm needs "Key stream" that will xor text. It is different questions.

  • 写回答

2条回答 默认 最新

  • dongtu0088 2016-03-03 10:50
    关注

    Here is your code

    using System;
    using System.Text;
    using System.Security.Cryptography;
    using System.IO;
    
    class AES_CFB_XorKeyStream
    {
        static void Main(string[] args)
        {
            byte[] data = Encoding.UTF8.GetBytes("0123456789");
            byte [] k1 = Encoding.UTF8.GetBytes("0123456789abcdef");
            byte [] r1 = Encoding.UTF8.GetBytes("1234567890abcdef");
    
            Console.WriteLine("original " + BitConverter.ToString(data));
    
            using (RijndaelManaged Aes128 = new RijndaelManaged())
            {
                Aes128.BlockSize = 128;
                Aes128.KeySize = 128;
                Aes128.Mode = CipherMode.CFB;
                Aes128.FeedbackSize = 128;
                Aes128.Padding = PaddingMode.None;
                Aes128.Key = k1;
                Aes128.IV = r1;
    
                using (var encryptor = Aes128.CreateEncryptor())
                using (var msEncrypt = new MemoryStream())
                using (var csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                using (var bw = new BinaryWriter(csEncrypt, Encoding.UTF8))
                {
                    bw.Write(data);
                    bw.Close();
    
                    data = msEncrypt.ToArray();
                    Console.WriteLine("crypted " + BitConverter.ToString(data));
                }
            }
    
            using (RijndaelManaged Aes128 = new RijndaelManaged())
            {
                Aes128.BlockSize = 128;
                Aes128.KeySize = 128;
                Aes128.Mode = CipherMode.CFB;
                Aes128.FeedbackSize = 128;
                Aes128.Padding = PaddingMode.None;
    
                Aes128.Key = k1;
                Aes128.IV = r1;
    
                using (var decryptor = Aes128.CreateDecryptor())
                using (var msEncrypt = new MemoryStream())
                using (var csEncrypt = new CryptoStream(msEncrypt, decryptor, CryptoStreamMode.Write))
                using (var bw = new BinaryWriter(csEncrypt, Encoding.UTF8))
                {
                    bw.Write(data);
                    bw.Close();
    
                    data = msEncrypt.ToArray();
                    Console.WriteLine("decrypted " + BitConverter.ToString(data));
                }
            }
        }
    }
    

    output

    original 30-31-32-33-34-35-36-37-38-39
    crypted 76-2B-6D-CE-A9-C2-A7-46-0D-B7
    decrypted 30-31-32-33-34-35-36-37-38-39
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了