Encryption 如何将纯文本消息视为数值(用于加密算法)?

Encryption 如何将纯文本消息视为数值(用于加密算法)?,encryption,casting,Encryption,Casting,我正在学习密码算法,并在此过程中尝试实现一些众所周知的方案。我理解RSA和El Gamal背后的数学解释,但目前无法测试这两者的实现。根本的问题是,我看不到将纯文本转换为可操作数字的方法 例如: 在我看来,将字符串强制转换为整数应该是可能的,但在类似于上面示例的方法中这样做是行不通的。如何将纯文本消息转换为数字值,然后再转换为纯文本值以进行加密?Diffie Hellman和RSA中使用的数字非常大,因此实现它们的库使用可以表示数千位数字的专用类型。转换为int最多只能保存32或64位 这些库中

我正在学习密码算法,并在此过程中尝试实现一些众所周知的方案。我理解RSA和El Gamal背后的数学解释,但目前无法测试这两者的实现。根本的问题是,我看不到将纯文本转换为可操作数字的方法

例如:


在我看来,将字符串强制转换为整数应该是可能的,但在类似于上面示例的方法中这样做是行不通的。如何将纯文本消息转换为数字值,然后再转换为纯文本值以进行加密?

Diffie Hellman和RSA中使用的数字非常大,因此实现它们的库使用可以表示数千位数字的专用类型。转换为int最多只能保存32或64位


这些库中的大多数都能够将字节字符串转换为大整数类型。将字符串转换为大整数通常需要中间步骤,即应用字符编码将字符串转换为字节字符串。

如果您真的只想将文本字符串转换为数值,只需将每个字符的ASCII数值相加即可。当然,这不是一个可靠的校验和,如果文本具有更高的unicode值,您可能会遇到问题

在C中,您可以快速完成以下任务:

#include<stdio.h>
#include<string.h>

int main(){
 int k = 0;
 int value = 0;
 char text[]="this is a piece of text.";
 char c;
 for(k=0; k<strlen(text); k++){
   c = text[k];
   value = value + c;
   printf("char %c has value %d\n", c, c);
 }
 printf("total value is: %d\n", value);
 return 0;
}

请注意,这绝不是一种安全或有效的方法来确保文件是它应该是校验和的。如果要为给定的文本流指定一个值,请尝试SHA-1哈希函数。

将字符串转换为整数通常有两个步骤。第一种方法是将每个字符转换为一个小整数,然后将生成的小整数序列转换为一个大整数。例如,在Java或C中,您可以轻松地将字符串转换为表示其UTF-8编码的字节数组。然后,通过将字节数组视为base-256整数,可以将其转换为大整数。据我所知,每个BigInteger包都有一个接受字节数组的构造函数,还有一个相反的方法,它接受BigInteger并返回字节数组。

我知道实际用例中的数字很大,但是我现在测试的是比较小的数字,只是为了确保我的实现是正确的。@ XBigTK13X——一个演员仍然不能用java或C++语言或C语言来工作,这会让你用一个演员来做,但是只能根据你的int大小来做4到8个角色。在Java或C中,您需要将字符串转换为字节,然后使用位操作将字节打包为int。我将给出一个示例,但是如果您的实现不在某种BigInteger类型上运行,那么它将不正确。如果在实现中使用原语int类型,那么如果不进行更改,它将无法工作。此外,规范中发布的所有测试向量都使用大整数。使用其他软件进行测试也非常有帮助,以确保成功地进行交互操作。当然,这也需要使用大整数。这不允许恢复消息。有很多很多可能的方法来创造2147.Yep的总和。这只是一种将字符串转换为数字的方法——普通的校验和。对于创建可靠加密算法的问题。。。恐怕这是一个完全不同的、困难的游戏。我怎样才能将纯文本信息转换成数字值,然后再转换成纯文本值?如果被接受的答案确实解决了你真正的问题,这是我见过的最糟糕的问题。
#include<stdio.h>
#include<string.h>

int main(){
 int k = 0;
 int value = 0;
 char text[]="this is a piece of text.";
 char c;
 for(k=0; k<strlen(text); k++){
   c = text[k];
   value = value + c;
   printf("char %c has value %d\n", c, c);
 }
 printf("total value is: %d\n", value);
 return 0;
}
char t has value 116
char h has value 104
char i has value 105
char s has value 115
char   has value 32
char i has value 105
char s has value 115
char   has value 32
char a has value 97
char   has value 32
char p has value 112
char i has value 105
char e has value 101
char c has value 99
char e has value 101
char   has value 32
char o has value 111
char f has value 102
char   has value 32
char t has value 116
char e has value 101
char x has value 120
char t has value 116
char . has value 46
total value is: 2147