view topology/manager/CreateHash.cs @ 60:14222beab95b

fix
author KaitoMaeshiro <aosskaito@cr.ie.u-ryukyu.ac.jp>
date Thu, 27 Jan 2022 18:05:42 +0900
parents
children 1a42115e51bb
line wrap: on
line source

using System;
using System.Text;
using System.Linq;
using System.Security.Cryptography;
using System.Collections.Generic;
using Christie_net.daemon;
using Christie_net.annotation;
using Christie_net.codegear;
using Christie_net.topology;


namespace Christie_net.topology.manager {

    public class CreateHash : CodeGear
    {
        [Take] public String orderHash;
        [Peek] public LinkedList<String> createdList;

        public CreateHash()
        {
        }

        public override void Run(CodeGearManager cgm)
        {
            Boolean checkNewStr = false;
            String raw = null;

            while (!checkNewStr)
            {
                //raw = RandomStringUtils.randomAscii(10);
                raw = RandomString();
                // checking raw String has already created
                int count = 0;
                foreach (String str in createdList)
                {
                    if (raw.Equals(str)) break;
                    count++;
                }

                if (count == createdList.Count) checkNewStr = true;
            }

            createdList.AddLast(raw);
            
            /*
            try
            {
                // convert to MD5
                String MD5 = convertMD5(raw);

                GetLocalDgm().Put("MD5", MD5);
            }
            
            catch (NoSuchAlgorithmException e)
            {
                System.out.println("cannot convert MD5");

            }
            */

            cgm.Setup(new CreateHash());
        }
        
        
        private static Random random = new Random();
        
        public static string RandomString(int length = 10)
        {
            const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
            return new string(Enumerable.Repeat(chars, length)
                .Select(s => s[random.Next(s.Length)]).ToArray());
        }


        private String convertMD5(String raw) /*throws NoSuchAlgorithmException*/
        {
            
            MessageDiges md = MessageDiges.getInstance("MD5");
            md.update(raw.GetBytes());
            byte[] hash = md.digest();
            
            
            StringBuilder builder = new StringBuilder();
            foreach (byte aHash in hash)
            {
                if ((0xff & aHash) < 0x10)
                {
                    builder.Append("0" + Integer.ToHexString((0xff & aHash)));
                }
                else
                {
                    builder.Append(Integer.toHexString((0xff & aHash)));
                }
            }
            return builder.ToString();
        }
    }
}