我在C#中遇到了新的Tuple功能错误.如果我使用三元运算符来确定元组的值,我必须用括号括起来.我没想到这一点,因为在方法调用中情况并非如此.
这有什么理由还是个bug?
建立:
我的代码:
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) 我正在尝试实现一种结构(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)