标签: caesar-cipher

C:用户输入包含"'"字符的字符串

我需要读取用户输入和用户Caesar cypher来加密它.但是在阅读用户输入时我遇到了以下问题,如果我输入例如我的程序没有终止:" ./caesar 3 I'm"问题似乎是字符'.该程序适用于其他输入.

/**
 *
 * caesar.c
 *
 * The program caesar encrypts a String entered by the user
 * using the caesar cipher technique. The user has to enter
 * a key as additional command line argument. After that the
 * user is asked to enter the String he wants to be encrypted.
 *
 * Usage: ./caesar key [char]
 *
 */

#include <cs50.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

int caesarCipher(char original, …
Run Code Online (Sandbox Code Playgroud)

c encryption char caesar-cipher cs50

0
推荐指数
1
解决办法
540
查看次数

具有所有Unicode可打印字符的Caesar密码

我想创建一个凯撒密码,它可以从整个Unicode(私有使用区域除外)编码/解码unicode可打印字符(单和多码点字形集群,表情符号等).优选地,它将使用所有可打印字符的列表.

注意:即使我想创建一个caesar密码,它实际上不是关于加密.问题是关于调查unicode的属性.

我发现了这些问题:

Unicode可打印字符的范围是多少?

密码与所有unicode字符

但我没有得到我想要的答案.

注意:如果您给出编码答案,我最感兴趣的是使用python3或perl6的解决方案,因为它们是我的主要语言.

最近,我被赋予编写凯撒密码的任务,然后对英文文本进行编码和解码.

我通过使用字符串库的内置string.printable常量在python中解决了它.这是常量的打印输出:(我使用了visual studio代码)

[参见下面的python代码和结果]

文档说:'''ASCII字符串,被认为是可打印的.这是数字,ascii_letters,标点符号和空格的组合.''' https://docs.python.org/3.6/library/string.html#string-constants

我想知道你如何创建一个凯撒密码,它可以编码/解码你可以从unicode代码点制作的所有可打印字符(只要你拥有所有必需的字体来查看那些应该在屏幕上可见的字体).

以下是我对可打印字符的含义的理解:

当我将python字符串常量保持在上面,并使用键盘上的左侧或方向箭头键遍历它时,我只需要100个笔画即可到达末尾(与字符数相同).看起来在作为可打印字符和可以通过箭头键的一个笔划进行遍历之间存在一对一的对应关系.

现在考虑这个字符串:

"ijक्षि"

基于pythons string.printable常量,这个字符串在我看来由以下7个可打印字符组成:(您可以在以下位置查找各个代码点:https://unicode-table.com/en/)

1(家庭)2(拉丁小Ligature Ij)3(cariage return)4(Devanagari kshi)5(空间)6(零宽度不间断空间)7(黑桃王牌)

代码点:128104 8205 128105 8205 128103 8205 128102(参考:https://emojipedia.org/family-man-woman-girl-boy/ )

(Latin Small Ligature Ij)ijcodepoint:307

(回车)代码点:13

(Devanagari kshi)क्षिcodepoints:2325 2381 2359 2367
(参见本页:http://unicode.org/reports/tr29/ )(代码点似乎是十六进制而不是数字)

(空格)码点:32

(零宽度不间断空间)代码点:65279(AKA U + FEFF BYTE ORDER MARK(BOM))(https://en.wikipedia.org/wiki/Byte_order_mark)

(黑桃牌扑克牌)代号:127137

当我将这个字符串粘贴到记事本中,并尝试用箭头键遍历它时,我最终使用了10个键击而不是7个键,因为家族表情符号需要4个键击(可能是因为记事本无法处理零宽度连接符,代码点:8205,当然记事本不能显示家庭标志符号).另一方面,当我将字符串发布到谷歌搜索时,我可以用7个笔画遍历整个字符串.

然后我尝试在Perl6中创建字符串以查看Perl6的字形意识对字符串的影响:

(我使用Atom编辑器)

[参见下面的perl6代码和结果]

perl6认为Devanagari kshi角色(4个代码点)实际上是2个字形,每个字形有2个代码点.即使它可以表示为两个字符,如上面的列表所示,我认为这是一个错误.Perl6应该是字形意识,甚至我的Windows记事本(和谷歌搜索)认为它是一个字素/字符.

基于2个字符串,可打印字符的实际定义似乎是这样的:'它是任何unicode代码点的组合,可以在理想的环境下通过键盘上的一个左或右箭头键来遍历.

"在理想环境下"意味着您正在使用的环境可以说就像谷歌搜索一样:也就是说,它可以识别例如表情符号(4人家族)或字形集群(梵文字符)作为一个可打印的字符.

3个问题:

1:以上是unicode中可打印字符意味着什么的公平定义?

2:无论你是否接受这个定义,你知道任何覆盖当前使用的unicode平面和可能的字形集群的可打印字符列表,而不仅仅是python字符串库所拥有的100个ASCII字符(如果我有这样的列表)我想我可以很容易地创建一个密码)?

3:鉴于这样的列表不存在,并且您接受该定义,您将如何创建这样一个列表,我可以创建一个凯撒密码,可以在给定以下4个条件的情况下加密任何/所有可打印字符?

注意:这4个条件正是我想象的适当的凯撒密码所需要的.

条件a

要加密的字符串将是一个有效的utf8字符串,包含标准的unicode代码点(没有未分配的或私有的区域代码点)

条件b

加密字符串也必须是由标准unicode代码点组成的有效utf8字符串. …

python unicode perl6 caesar-cipher

0
推荐指数
1
解决办法
573
查看次数

malloc(): 损坏的顶部大小

我正在开发一个程序来解密文件中的某些文本行。首先,我创建的另一个源代码要求转换和一些文本。源代码加密文本并将其写入文件。

然后,我尝试使用以下代码(另一个源代码)解密指定的文件。获取文件名。从文件名获得移位。文件中写入的每个字符都被复制,在函数 caesar_decrypt -reversing caesar encrypt 的帮助下移动了 shift 的值,我也有。但是,给定的字符必须是 32 到 127 之间的 ascii 值才能转换为 32 到 127 之间的另一个 ascii 值字符。

我定义了我的模函数,它封装了余数运算符 - 正数的模 - 和负数的模。我还定义了 strip 函数,它的工作方式与 python 中的 strip 函数相同。除了空格,它会删除所有文字。我也有getIn(),它是python的input()。

我尝试通过打印和使用 gdb 进行调试。没有有效的结果。我在 stackoverflow 中研究过这个话题。找到一个条目。答案没有解决我的具体问题。

注意:我复制了整个程序,因为我认为您需要必要的详细信息。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <unistd.h>
#include <fcntl.h>

/*GETIN FUNCTION*/
char* getIn() 
{
    char *line = NULL, *tmp = NULL;
    size_t size = 0, index = 0;
    int ch = EOF;

    while (ch) 
    {
        ch = getc(stdin);

        /* …
Run Code Online (Sandbox Code Playgroud)

c malloc segmentation-fault caesar-cipher

0
推荐指数
1
解决办法
4万
查看次数

凯撒密码问题

我正在尝试实施一个凯撒密码.

我试图在函数中返回消息,但是我收到一条错误消息(外部函数).有人可以帮忙吗?

提前致谢

cat
cate
catec
catecv

message = input("type message ")

shift = int(input("Enter number to code "))
message = message.lower() #convets to lower case
print (message)

for a in message:
    if a in "abcdefghijklmnopqrstuvwxyz":
        number = ord(a)
        number += shift
        if number > ord("z"):
            number -= 26
        elif number < ord("a"):
             number += 26
        message = message + (chr  ( number))

    print (message)
Run Code Online (Sandbox Code Playgroud)

python caesar-cipher

-1
推荐指数
1
解决办法
1172
查看次数

Caesar Cipher使用char*?C++

所以我想尝试使用Ceasar Cipher char *,我写了一个简单的函数:

char * Encrypt(char * s, int k)
{
    char * c = s;

    for(int i = 0; i < strlen(s); i++)
       c[i] += k;

    return c;
} 
Run Code Online (Sandbox Code Playgroud)

这似乎看起来应该有效,但事实并非如此.它在运行程序时抛出错误.

以下是我如何调用此函数的示例:

int main()
{
    cout << Encrypt("hello", 2) << endl;
    system("pause");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在你说"为什么不只是使用string?"之前,答案是我在某个SDK上编写C++,在使用时会导致编译器错误string.好的但是,任何形式的帮助都将非常感谢,谢谢!

c++ encryption char-pointer caesar-cipher

-3
推荐指数
1
解决办法
464
查看次数

错误:else if语句中的预期表达式

这是我得到的错误:

test.c:110:21: error: expected expression
                    else if(isupper(p_i))
                    ^
1 error generated.
Run Code Online (Sandbox Code Playgroud)

else if代码结尾的声明中else if(isupper(p_i))- " " - 生成错误.

我在上面评论了这个'else if'声明.请让我知道什么是错的.谢谢.

#include <stdlib.h>         // The library which contains the 'atoi()' function
#include <stdio.h>          //        
#include <cs50.h>           // typedef char *string; and GetString()
#include <string.h>         // 

// 'argv[]' is an array of strings.  (Fun fact: A string is an array of characters.) 
// 'argc' is the integer variable which stores the number of strings that are in 'argv[]'. …
Run Code Online (Sandbox Code Playgroud)

c caesar-cipher cs50

-4
推荐指数
1
解决办法
1万
查看次数

在C编程中寻找模数或%的直接相反

构建了一个使用Caesar Cipher加密事物的C程序.它将它转换为字母数字(0 = a/1 = b/2 = c),然后在移动了使用模运算符指定的字符数后转换它.我目前正在尝试构建一个解密它的程序,我需要与模运算符完全相反的方法来反转序列.

c caesar-cipher cs50

-4
推荐指数
1
解决办法
212
查看次数