我试图从LocalDate对象获取下个月的第一天,但遇到了一些问题.
我有一个日期选择器,用户可以选择他们想要的任何日期,没有限制,我需要获得下个月的第一天,这是我想到的:
LocalDate localDate = myDatePicker.getValue();
LocalTime startTime = LocalTime.of(0, 0);
LocalDate endDate = LocalDate.of(localDate.getYear(), localDate.getMonthValue() + 1, 0);
Run Code Online (Sandbox Code Playgroud)
但是我看到选择12月份时可能会出现问题,如果发生这种情况则会发生
LocalDate.of(localDate.getYear(), localDate.getMonthValue() + 1, 0);
Run Code Online (Sandbox Code Playgroud)
应该失败,因为我将它传递给它一个月值13.现在我可以选择检查月份值是否为12月,如果是,我可以在年份中添加1并从0开始,如下所示:
if(localDate.getMonthValue() >= 12)
LocalDate.of(localDate.getYear() + 1, 0, 0);
Run Code Online (Sandbox Code Playgroud)
但是我觉得必须有一种方法来解决这个问题.有谁知道我将13传递给LocalDate.of月值的假设是否会导致错误?如果是这样有一种方法可以做我想做的事情,看起来不那么糟糕,并使用构建方法?
因此,我正在尝试实现一种简单的端到端加密方案,在该方案中,客户端与另一客户端进行握手,方法是使用其私钥进行加密,将公钥发送给第二个客户端私钥进行加密,然后再使用私钥解密客户端1的密钥并发回,因此客户端2具有公共密钥。我正在使用C#.Net提供的Aes类,似乎无法使其正常工作。
我收到的错误是关于填充的,我已经看到您可以完全删除填充,但是有人告诉我这不是一个好主意。谁能解释为什么?另外我怎么知道设置我的解密/加密的填充能够查看有效密钥。
这就是我所拥有的
class Program
{
static void Main(string[] args)
{
Connection c = new Connection();
Connection d = new Connection();
var encrypted = c.EncryptMessage("stackoverflow");
var decrypted = c.DecryptMessage(encrypted);
var encryptedTwice = d.EncryptMessage(System.Text.Encoding.Default.GetString(encrypted));
var decryptedOnce = c.DecryptMessage(encryptedTwice);
var decryptedTwice = d.DecryptMessage(Encoding.ASCII.GetBytes(decryptedOnce));
Console.WriteLine("Encrypted: " + System.Text.Encoding.Default.GetString(encrypted));
Console.WriteLine("Decrypted: " + decrypted);
Console.WriteLine("Decrypted twice: " + decryptedTwice);
Console.ReadKey();
}
}
class Connection
{
private Aes _encryption;
Connection()
{
_encryption = Aes.Create();
}
public byte[] EncryptMessage(string message)
{
byte[] encrypted;
ICryptoTransform encryptor = _encryption.CreateEncryptor(_encryption.Key, …Run Code Online (Sandbox Code Playgroud)