搜索
热搜: 活动 交友 discuz
楼主: 木魚
收起左侧

[12306] 12306用于加密随机密钥的加密算法

[复制链接]
  • TA的每日心情
    擦汗
    2015-3-20 12:41
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2013-9-19 16:55:01 | 显示全部楼层
    :curse::funk:不知道易语言的咋写,,郁闷中
  • TA的每日心情
    擦汗
    2015-10-8 08:08
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    发表于 2013-9-19 20:41:40 | 显示全部楼层
    木魚 发表于 2013-9-19 13:22
    改写一下,这个是 string.Join 的扩展方法格式。

    @木鱼
    有空把这个方法更新下。
  • TA的每日心情
    慵懒
    2014-1-9 17:04
  • 签到天数: 26 天

    [LV.4]偶尔看看III

    发表于 2013-9-19 20:57:18 | 显示全部楼层
    c# 不太熟悉。努力学习。
  • TA的每日心情
    擦汗
    2015-10-8 08:08
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    发表于 2013-9-22 08:48:47 | 显示全部楼层
    @木鱼
    string.Join 的扩展方法格式如何写?
    还是把这个算法补充完整吧。

    点评

    [mw_shl_code=csharp,true]public static class Extensions { #其他扩展 #JoinAsString public static string JoinAsString(this IEnumerable objs, string separator = "") { return string.Join(sepa  详情 回复 发表于 2013-9-22 09:31
  • TA的每日心情
    开心
    2016-12-18 07:46
  • 签到天数: 28 天

    [LV.4]偶尔看看III

    发表于 2013-9-22 09:31:38 | 显示全部楼层
    14309 发表于 2013-9-22 08:48
    @木鱼
    string.Join 的扩展方法格式如何写?
    还是把这个算法补充完整吧。

    [C#] 纯文本查看 复制代码
    public static class Extensions {
    #其他扩展
    
    #JoinAsString
    public static string JoinAsString<T>(this IEnumerable<T> objs, string separator = "") {
                return string.Join(separator, objs);
            }
    }


    可能是这样 不懂c# 哈哈
  • TA的每日心情

    2016-1-25 16:08
  • 签到天数: 63 天

    [LV.6]常住居民II

    发表于 2013-9-22 12:26:39 | 显示全部楼层
    本帖最后由 aNyoNe 于 2013-9-22 12:27 编辑

    擦,我把扩展方法给你们瞅瞅~~就不直接贴代码~~~哈哈

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?入住

    x
  • TA的每日心情
    奋斗
    2019-1-5 01:55
  • 签到天数: 138 天

    [LV.7]常住居民III

     楼主| 发表于 2013-9-22 13:09:20 | 显示全部楼层
    一点探索求知的精神都木有。。。
  • TA的每日心情
    擦汗
    2015-10-8 08:08
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    发表于 2013-9-22 15:22:28 | 显示全部楼层

    调试通过的完整代码。又学习了。

    [C#] 纯文本查看 复制代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace Base32test
    {
        public static class Base32
            {
                    static uint _delta = 0x9E3779B8;
                    static string _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    
                    static string LongArrayToString(uint[] data, bool includeLength)
                    {
                            var length = (uint)data.Length;
                            var n = (length - 1) << 2;
                            if (includeLength)
                            {
                                    var m = data[length - 1];
                                    if ((m < n - 3) || (m > n)) return null;
                                    n = m;
                            }
                            var result = new string[length];
                            for (var i = 0; i < length; i++)
                            {
                                    result[i] = new uint[] { data[i] & 0xff, data[i] >> 8 & 0xff, data[i] >> 16 & 0xff, data[i] >> 24 & 0xff }.Select(s => (char)s).JoinAsString("");
                            }
                            if (includeLength)
                            {
                                    return result.JoinAsString("").Substring(0, (int)n);
                            }
                            else
                            {
                                    return result.JoinAsString("");
                            }
                    }
    
                    static uint[] StringToLongArray(string str, bool includeLength)
                    {
                            var length = str.Length;
                            var result = new List<uint>(length / 4);
    
                            for (var i = 0; i < length; i += 4)
                            {
                                    result.Add((uint)(str[i]) | (uint)(str[i + 1]) << 8 | (uint)(str[i + 2]) << 16 | (uint)(str[i + 3]) << 24);
                            }
                            if (includeLength)
                            {
                                    result.Add((uint)length);
                            }
                            return result.ToArray();
                    }
    
                    static string Encrypt(string str, string key)
                    {
                            if (String.IsNullOrEmpty(str))
                            {
                                    return "";
                            }
                            var v = StringToLongArray(str, true);
                            var k = StringToLongArray(key, false);
                            if (k.Length < 4)
                            {
                                    var nk = new uint[4];
                                    Array.Copy(k, nk, k.Length);
                                    k = nk;
                            }
                            var n = v.Length - 1;
                            var z = v[n];
                            var y = v[0];
                            var q = (int)Math.Floor(6 + 52.0 / (n + 1));
                            var sum = 0U;
                            while (0 < q--)
                            {
                                    sum = sum + _delta & 0xffffffff;
                                    uint e = (sum >> 2 & 3);
                                    uint mx;
                                    uint p;
                                    for (p = 0; p < n; p++)
                                    {
                                            y = v[p + 1];
                                            mx = (z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z);
                                            z = v[p] = v[p] + mx & 0xffffffff;
                                    }
                                    y = v[0];
                                    mx = (z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z);
                                    z = v[n] = v[n] + mx & 0xffffffff;
                            }
                            return LongArrayToString(v, false);
                    }
    
                    static string Encode32(string input)
                    {
                            var output = "";
                            var i = 0;
                            do
                            {
                                    var chr1 = (uint)input[i++];
                                    var chr2 = i >= input.Length ? 0 : (uint)input[i++];
                                    var chr3 = i >= input.Length ? 0 : (uint)input[i++];
                                    var enc1 = chr1 >> 2;
                                    var enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
                                    var enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
                                    var enc4 = chr3 & 63;
                                    if (chr2 == 0)
                                    {
                                            enc3 = enc4 = 64;
                                    }
                                    else if (chr3 == 0)
                                    {
                                            enc4 = 64;
                                    }
                                    output = output + _keyStr[(int)enc1] + _keyStr[(int)enc2] + _keyStr[(int)enc3] + _keyStr[(int)enc4];
                            } while (i < input.Length);
                            return output;
                    }
    
                    static string Bin216(string s)
                    {
                            return s.Select(c => ((int)c).ToString("x2")).JoinAsString("");
                    }
    
    
          public static string JoinAsString<T>(this IEnumerable<T> objs, string separator = "")
            {
                return string.Join(separator, objs);
            }
    
    
    
                    public static string Encode(string key, string value = "1111")
                    {
                            var data = Encrypt(value, key);
                            var data2 = Bin216(data);
                            return Encode32(data2);
                    }
            }
    }
    

  • TA的每日心情

    2016-1-25 16:08
  • 签到天数: 63 天

    [LV.6]常住居民II

    发表于 2013-9-22 15:36:02 | 显示全部楼层
    木魚 发表于 2013-9-22 13:09
    一点探索求知的精神都木有。。。

    哈哈,以后不让贴代码。
  • TA的每日心情

    2016-1-25 16:08
  • 签到天数: 63 天

    [LV.6]常住居民II

    发表于 2013-9-22 15:40:07 | 显示全部楼层
    14309 发表于 2013-9-19 20:41
    @木鱼
    有空把这个方法更新下。

    自己动手丰衣足食啊 哥哥
    您需要登录后才可以回帖 登录 | 入住

    本版积分规则

    申请友链| Archiver| 手机版| 鱼·后花园

    GMT+8, 2024-11-22 23:22 , Processed in 0.021591 second(s), 14 queries , Redis On.

    Powered by Discuz! X3.4

    © 2005-2024 鱼·后花园

    快速回复 返回顶部 返回列表