[fix]修正UdpServer在接收广播时连续启动接收的错误,在StarAgent中,此时可能收到广播包,SocketFlags是Broadcast,需要清空,否则报错“参考的对象类型不支持尝试的操作”; 无需设置SocketOptionName.PacketInformation,在ReceiveMessageFromAsync时会自动设置,并且支持ipv6;
石头 authored at 2024-10-10 00:36:00 石头 committed at 2024-10-10 00:45:43
1.36 KiB
X
using System;
using System.Text;
using NewLife;
using NewLife.Security;
using Xunit;

namespace XUnitTest.Security
{
    public class PasswordProviderTests
    {
        [Fact]
        public void HashTest()
        {
            var prv = new SaltPasswordProvider();
            var hash = prv.Hash("New#life");

            var ss = hash.Split('$');
            Assert.Equal(4, ss.Length);
            Assert.Empty(ss[0]);
            Assert.Equal(prv.Algorithm, ss[1]);

            var salt = ss[2];
            var hash2 = "New#life".GetBytes().SHA512(salt.GetBytes()).ToBase64();
            Assert.Equal(hash2, ss[3]);

            var rs = prv.Verify("New#life", hash);
            Assert.True(rs);
        }

        [Fact]
        public void SaltTime()
        {
            var prv = new SaltPasswordProvider
            {
                SaltTime = 30,
                Algorithm = "md5",
            };
            var hash = prv.Hash("New#life");

            var ss = hash.Split('$');
            Assert.Equal(4, ss.Length);
            Assert.Empty(ss[0]);
            Assert.Equal(prv.Algorithm, ss[1]);

            var salt = ss[2];
            Assert.True(salt.ToInt() > 0);

            var hash2 = ("New#life".MD5() + salt).MD5();
            Assert.Equal(hash2, ss[3]);

            var rs = prv.Verify("New#life", hash);
            Assert.True(rs);
        }
    }
}