×

Loading...
Ad by
Ad by

有没有谁能描述下帖子内的加密算法(C#代码)? 不知道它算不算是一种加密算法? 如果是它的KEY SIZE 是多少?

public static byte[] encrypt(string ascii_text)
{
if (ascii_text == null) return new byte[] { 0 };
byte[] ba = new byte[ascii_text.Length + 1];
ba[0] = (byte)ascii_text.Length;
int offset = 167;
char[] ca = ascii_text.ToCharArray();
for (int i = 0; i < ascii_text.Length; i++)
{
offset += 12;
int b = (int)ca[i];
b += offset % 256;
b = b % 256;
ba[i + 1] = (byte)b;
}
if (decrypt(ba) != ascii_text) throw new ApplicationException();
return ba;
}

public static string decrypt(byte[] ba)
{
StringBuilder sb = new StringBuilder(ba[0]);
int offset = 167;
for (int i = 0; i < ba[0]; i++)
{
offset += 12;
}
for (int i = 0; i < ba[0]; i++)
{
int b = ba[ba[0] - i];
b = b - offset % 256;
if (b < 0) b += 256;
sb.Insert(0, new char[] { (char)b });
offset -= 12;
}
return sb.ToString();
}
Report

Replies, comments and Discussions:

  • 工作学习 / 学科技术讨论 / 有没有谁能描述下帖子内的加密算法(C#代码)? 不知道它算不算是一种加密算法? 如果是它的KEY SIZE 是多少?
    public static byte[] encrypt(string ascii_text)
    {
    if (ascii_text == null) return new byte[] { 0 };
    byte[] ba = new byte[ascii_text.Length + 1];
    ba[0] = (byte)ascii_text.Length;
    int offset = 167;
    char[] ca = ascii_text.ToCharArray();
    for (int i = 0; i < ascii_text.Length; i++)
    {
    offset += 12;
    int b = (int)ca[i];
    b += offset % 256;
    b = b % 256;
    ba[i + 1] = (byte)b;
    }
    if (decrypt(ba) != ascii_text) throw new ApplicationException();
    return ba;
    }

    public static string decrypt(byte[] ba)
    {
    StringBuilder sb = new StringBuilder(ba[0]);
    int offset = 167;
    for (int i = 0; i < ba[0]; i++)
    {
    offset += 12;
    }
    for (int i = 0; i < ba[0]; i++)
    {
    int b = ba[ba[0] - i];
    b = b - offset % 256;
    if (b < 0) b += 256;
    sb.Insert(0, new char[] { (char)b });
    offset -= 12;
    }
    return sb.ToString();
    }
    • 这种算法相当原始了,应该算是原始的算法里的substitution。输出的字符串第一个字节是字符串长度;在后面的所有数据里,每个字节都是加上一个数值
      这个数值是一个与其位置相对应的常量,具体算法就是 167 + 12 * offset。这个量加上字符数值,除去所有溢出位后得到最终数据。这个算法应该是 additive substitution的一种,没有key的概念,在加密方和解密方之间不需要交流任何key
    • 这个加密算法没有用到key,key应该是加密解密双方事前约定的。这个算法只是一个函数而已。
    • 我记得加密算法 有公钥和私钥的概念
      • 这种加密算法也称非对称秘钥。还有一种对称秘钥算法,比如AES,DES,3-DES等等,这些算法不论加密解密用的都是一个秘钥
      • 正如上面同学所说,你指的是现代加密里相对比较安全的asymmetric key cryptography (public-key cryptography ),在PGP/GPG/TLS里都用到。相对还有一种共享密钥的symmetric key cryptography 。这两种算法在现代很多系统里都混合使用
        • 典型的应用比如SSL
          Asymmetric Algorithm相对symmetric algorithm更难破解一些,但是其速度非常慢。一般用在很短的信息交换上。比如,TLS handshaking或者双方身份认证(x509 certificate认证),交换后期数据加密密钥用的就是Asymmetric algorithm。TLS中一般用RSA算法。一旦SSL/TLS session建立起来,加密解密就用symmetric algorithm。现代计算机能力逐步强大,数学研究逐渐深入,一些原来所谓安全的算法都逐步被淘汰。数学上的进步使MD series hashing基本退出舞台,连SHA-1都被认为不安全,不得已用上了SHA 128, 256甚至512。DES由于只有56bit密钥,已经被triple DES(168 bit)还有AES 128, 256取代。
          • 是啊,类似的应用还有很多。说到ssl,其实整个机制里,在应用环节很多步骤需要认真考虑。不然加密容易被mitm或类似的机制完全破解。
            • 总体来说,ssl 3.0,尤其是TLS1.0发布后数据只要出了计算机就是安全的,目前计算机运算能力还不足以在“合理有效”时间内用brutal attack破解类似AES的算法。美国国家安全标准FIPS-140早就mandate TLS 1.0,理论上只要计算机本身没有被compromise,网络数据就是安全的
              • 你说的原理上成立,但在网络应用里并不完全对。即使是使用了ssl/tls,电脑通讯还是可能被网络黑客完全截取。这个系统的薄弱环节不是ssl/tls和算法的本省,而是系统Certificate Authority的依赖。如果对方在你的ISP或者更高端,应该有很多方法找到用户的弱点后进行攻击
                Man In The Middle就是利用这点。曾经很多银行的网站的HTTPS登陆设计有问题,去年曾在一个北美conferece上被公开演示过。当然现在至少银行和很多大公司的网络登陆这块已经都修改了
                • 这个典故还真不知道,能不能给各链接?
                  • 那个conference是去年秋季的事情了,那次演示的还是加拿大过去的人。不过链接可能比较难找,找到了再贴上来。最近的例子是NSA监视的案例,实现就是靠mitm,但具体方式网络上猜测很多。总之,很多人一看到https等建于ssl基础上的加密连接连上,就以为安全了。其实不然
                    • NSA不太可能用MITM,中间人攻击很容易被检测,并且需要在终端上或者安装cert或者应用在验证trust chain时有漏洞。加密算法都是靠软件实现的,NSA更有可能通过软件中的漏洞(例如OpenSSL)或者在TLS/SSL的server端做手脚。
                      另外RSA算法在TLS/SSL里紧紧用于加密session key,真正的内容还是使用RC4之类的对称加密。典型的HTTP(S)通讯里有很多重复的内容,例如协议里规定的HEADER需要填的内容,RESPONSE里面的cookie等。理论上有可能将整个HTTPS过程记录下来,然后利用高性能计算机进行异步分析,已经有论文证明RC4不可靠。
                      • 如果通讯中一个point被compromise,那就无话可说了
                        怎么通过CA来做MITM?认证CA也是通过RSA和hashing来解决的。如果破不了RSA和强化hashing,怎么伪造CA?RC4多数很critical的加密比如银行都不用了,3-DES, AES, IDEA等等都可以。美国人现在比较通行AES,主要有128,192还有256bit。对于192 256bit,即便你知道原文和密文要在合理时间内算出key在现今技术条件下也是不可能的事情
                        • 基本就是这个意思了。但实际操作上,演示者实际用了很多种不同的方案演示了很多种使用不同技术的截取方案,据他自己说,曾经在ISP端选了个银行实测,一晚上截取了几百个客户的所有信息。每种方案都有自己的弱点,可惜
                          所有用户没有人注意到网络安全问题,或者说普通用户根本不清楚SSL的具体实现方式,而且都以为自己是安全的。截取实验失败率为0
                        • 大的公司或者企业对员工机器有一定的控制权,可以在trust store里安装自己的root certificate,然后在网关上可以执行中间人攻击,客户端不会看到任何异常,除了网站证书的trust chain会有所区别。另外,TLS/SSL协议本身也会有漏洞,例如CVE-2009-3555。
                          TLS/SSL的关键点在于客户端如何验证收到的证书来自于可信的服务器,这一般通过检查subject里面的域名和本地的trust chain验证,这两个环节同样是薄弱点。另外一个薄弱点在于服务器端,攻击者可以利用其他软件的漏洞攻破服务器从而窃取private key。
                          • 看来你已经明白了这些攻击的根本了。普通用户是无从知道这么多细节的。应该说,现在的互联网,即使有ssl加密通讯,也难逃被政府或其他中间机构或组织监控的命运
                            • 有没有可能NSA从VeriSign之类的顶级CA获取二级证书然后用来进行完美的中间人攻击?
                            • 嗯,原来如此。的确,普通用户很难了解到这一层。即便是专业人士,也经常疏忽
                      • 在客户端操作系统以及应用软件多样化的情况下,要靠客户端软件的bug进行大规模地网络检测似乎不太行得通,你认为呢?
                        • 现在基于OpenSSL的软件(例如Apache)在非Windows服务器上占绝大部分,这也就意味着一个OpenSSL的漏洞可以被利用来攻击很多服务器。OpenSSL的安全记录并非无懈可击,例如最近的CVE-2013-6450。
                          • bug并不是这类研讨会的议题,几乎所有的都是围绕着ssl本省以及应用层面上的安全漏洞进行讨论的。如果只是一两个bug,很难做到国家层面的监控。在系统层面上,当前的设计并非无泄可击,这个才是问题的关键。
                            • 更严重的是政府可能插手这些加密的算法或者协议的制定以及实现,例如大的厂商硬件TSL/SSL加密芯片里面的后门,以及前一段时间RSA警告NSA曾经参与双椭圆曲线随机数生成算法的实现并在其中安装了软件后门,这些涉及的范围确实远非单个软件漏洞可比。
                              • 应该不是安装软件后门吧
                                可能是ssl选定的特定的一个椭圆曲线nsa可以比较容易的有方法破解,其实现在加密算法本质上都是清一色伽罗华群隐子群映射,不管是弱爆了的小学生玩的余数加密还是牛逼的连警察局都没破解的zodiac系列杀手加密信件。除了量子计算机意外没有破解可能。即使想打破nsa垄断ssl的算法,可以搞一个非椭圆曲线的子群映射么,反正是否有子群映射数学上来说很难找到,甚至我们在排除kernality的时候都会费劲周折更不用说找到这样一个homomorphism,虽然椭圆曲线是非常理想的离散伽罗华群的选择对象。但我们还有多的去的方法。。。。所以我个人推测,想垄断ssl也许不是特别容易。。更可能rsa和nsa闹矛盾了rsa想黑一下nsa所以说了这句话?
                                不过同意你的,基本上都是key出在key泄漏的问题上,而且key泄漏太频繁太普通肋
                          • DTLS只是一个候补标准而已,,,数据报的协议很难做安全通信+高效
                        • Latest case: all Apple (i)OS devices were subject to MITM attack for the last 15 months due to a bug in code which does SSL certificate validation. It has an official name now: goto fail;
                  • 他可能是指BEAST ATTACK吧,,截取SESSION ID
          • SHA-1已经是160 bits,哪来的SHA-128。。。
    • 这个没Key,也凑合算吧,不过任何没Key的算法不管你函数里怎么折腾,都好破的很
    • 原始加密算法,算法本身不能让人知道,知道了也就被破了。而现代加密算法,算法本身是公开的,谁都会实现。而通过key的随机性来保证无法在有限的时间内和现有的技术条件下被破解。非对称加密主要是RSA和EC,对称加密主要是AES。
    • \x04\x18\x20\x3E\x50, 这种古老加密算法缺点明显. 1.密文首字节是明文长度 2.密文的规律性明显,12的步长,对256的取余很容易被归纳出来.加上英文使用的规律性.这样的算法用来加密英语自然语言的话,估计用算盘不用就被破解了.
      • 对了,你这个算法没有key.就是逐字的ASCII值加上一个由位置决定的offset,对256取余.上面的密文是easy加密的结果.如果5分钟内理解不了你那个算法的话, 这个人就别学计算机了.
    • 这“加密”算法还不如著名序列杀手zodiac的调戏警察的cipher密文。。。。人家调戏了警察那么多年,至今还是没有被破解。:P