小编Flo*_*eck的帖子

在C#中创建元组时编译包含三元运算符括号的错误

我在C#中遇到了新的Tuple功能错误.如果我使用三元运算符来确定元组的值,我必须用括号括起来.我没想到这一点,因为在方法调用中情况并非如此.

这有什么理由还是个bug?

建立:

  • Visual Studio 2017
  • .Net Standard 1.6类库
  • System.ValueTuple(v4.3.0 - 来自Nuget)

我的代码:

public class Test
{
    public bool Ok { get; set; }
    public string Text { get; set; }
}

public class Class1
{
    public void TestMethod()
    {
        //
        // FROM OBJECT
        //
        Test obj = new Test() { Ok = true, Text = "asdf" };

        StringMethod(true, obj.Ok ? obj.Text : "fsda");      // <-- OK
        var result1 = (true, obj.Ok ? obj.Text : "fsda");    // <-- Error
        var …
Run Code Online (Sandbox Code Playgroud)

c# tuples ternary-operator c#-7.0

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

Go中的AES-GCM + Base64后无法解密

情况

我正在尝试实现一种结构(CryptoService),以便从主程序流中隐藏加密/解密。我已经实现了“正常”功能和base64变体,应该将密码编码为与base64等效的密码,反之亦然。这样做是因为我们的内部网络协议使用换行符\n作为分隔符。

参见下面的实现代码

问题

在编写下面的代码后,我开始对其进行测试。最初,它运行良好,并且加密和解密都能正常工作,但是很快我开始注意到解密过程中出现的“随机发生”错误:cipher: message authentication failed。现在重要的事实:该错误从返回DecryptBase64FUNC。但是go中的base64用法非常简单,不必担心太多,因此我不知道问题出在哪里。

在下面,您会看到我的CryptoService实现代码和相关的测试文件。我试图在不删除上下文的情况下尽可能地清理代码(删除注释,其他输入检查等)。尽管如此,它的代码很多,因此感谢所有阅读它的人-非常感谢您的帮助!

cryptoservice.go

type CryptoService struct {
    gcm cipher.AEAD
}

func NewCryptoService(key []byte) (cs *CryptoService, err error) {
    block, err := aes.NewCipher(key)
    if err != nil {
        return nil, err
    }
    gcm, err := cipher.NewGCM(block)
    if err != nil {
        return nil, err
    }
    return &CryptoService{
        gcm: gcm,
    }, nil
}

func (cs CryptoService) Encrypt(plain []byte) (cipher []byte, err error) …
Run Code Online (Sandbox Code Playgroud)

base64 cryptography go

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

标签 统计

base64 ×1

c# ×1

c#-7.0 ×1

cryptography ×1

go ×1

ternary-operator ×1

tuples ×1