恺撒加密简记

恺撒加密简记

介绍

恺撒密码(英语:Caesar cipher),或称恺撒加密、恺撒变换、变换加密,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是2的时候,所有的字母A将被替换成C,B变成D,以此类推。
示意图
因此,假如有个明文字符串“Hello”用这种方法加密的话,将变为密文: “Jgnnq” 。而如果要解密,则只要将字母向相反方向移动同样位数即可。如密文“Jgnnq”每个字母左移两位 变为“Hello” 。这里,移动的位数“2”是加密和解密所用的密钥。
使用公式定义,就是当秘钥为n,其中一个待加密字符ch,加密之后的字符为ch+n,当ch+n超过’z’时,回到’a’计数
凯撒密码的加密、解密方法还能够通过同余的数学方法进行计算。首先将字母用数字代替,A=0,B=1,…,Z=25。此时偏移量为n的加密方法即为:
E n ( x ) = ( x + n ) m o d   26 E_n(x)=(x+n)\qquad mod \ 26 En(x)=(x+n)mod 26
解密就是:
D n ( x ) = ( x − n ) m o d   26 D_n(x)=(x-n) \qquad mod \ 26 Dn(x)=(xn)mod 26
根据偏移量的不同,还存在若干特定的恺撒密码名称:

  • 偏移量为 10:Avocat (A→K)
  • 偏移量为 13:ROT13
  • 偏移量为 -5:Cassis (K 6)
  • 偏移量为 -6:Cassette (K 7)

恺撒密码通常被作为其他更复杂的加密方法中的一个步骤,例如维吉尼亚密码。恺撒密码还在现代的ROT13系统中被应用。但是和所有的利用字母表进行替换的加密技术一样,恺撒密码非常容易被破解,而且在实际应用中也无法保证通信安全。
具体介绍:百度百科:凯撒密码

代码如下

这里是使用凯撒密码,对Unity中的资源进行加密解密,所以使用了Unity的资源加载类UnityWebRequestWWW,以及协程,但这并不影响对加密解密的理解。

/// <summary>
/// 恺撒加密
/// </summary>
/// <returns></returns>
private IEnumerator EncryptionAB()
{
    byte[] bytes = null;
    UnityWebRequest request = new UnityWebRequest("file:///D:\\fcj\\unity2018\\VuforiaStudy\\BuildAssetBundle\\Window\\myab");
    yield return request.SendWebRequest();
    if (request.isDone && request.error == null)
        bytes = request.downloadHandler.data;
    //WWW www = new WWW("file:///D:\\fcj\\unity2018\\VuforiaStudy\\BuildAssetBundle\\Window\\myab");
    //yield return www;
    //if (www.isDone && www.error == null)
    //    bytes = www.bytes;

    for (int i = 0; i < bytes.Length; i++)//恺撒加密
    {
        bytes[i] += 1;
    }
    File.WriteAllBytes("D:\\fcj\\unity2018\\VuforiaStudy\\BuildAssetBundle\\Window\\myab_Encryption.assetbundle", bytes);
}
/// <summary>
/// 恺撒解密
/// </summary>
/// <returns></returns>
private IEnumerator DecryptAB()
{
    byte[] bytes = null;
    UnityWebRequest request = new UnityWebRequest("file:///D:\\fcj\\unity2018\\VuforiaStudy\\BuildAssetBundle\\Window\\myab_Encryption.assetbundle");
    yield return request.SendWebRequest();
    if (request.isDone && request.error == null)
        bytes = request.downloadHandler.data;
    //WWW www = new WWW("file:///D:\\fcj\\unity2018\\VuforiaStudy\\BuildAssetBundle\\Window\\myab_Encryption.assetbundle");
    //yield return www;
    //if (www.isDone && www.error == null)
    //    bytes = www.bytes;

    for (int i = 0; i < bytes.Length; i++)//恺撒解密
    {
        bytes[i] -= 1;
    }
    AssetBundle ab = AssetBundle.LoadFromMemory(bytes);
    GameObject go = ab.LoadAsset("Sphere") as GameObject;//注意这里是预制体名字
    Instantiate(go, Vector3.zero, Quaternion.identity);
    ab.Unload(false);
}

参考链接

  1. https://www.jianshu.com/p/647300d9938a
  2. https://blog.csdn.net/weixin_39766005/article/details/103897726
  3. https://www.cnblogs.com/Mayfly-nymph/p/11577798.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天富儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值