2013-08-06 36 views
-6

我正在使用C#。我希望能够从用户获取文本,然后将其验证为仅包含整数。如果我选择将字符串转换为int/long,则会丢失前导零。我想保持领先的零。我的计划是将此用户输入文本保留为字符串。将字符串(仅限数字)加密为另一个字符串(仅限数字)

我想加密这个字符串(只有数字),所以结果密文也是一串数字。有没有简单的方法在C#中做到这一点?这甚至有可能吗?有没有其他的选择?如果可能,我可以举例吗?

示例输入: “0”

实施例输出(后加密): “0129021398013”

一些要求:

  • 字符串的长度可以从12至19而变化(此长度可能 在未来发生变化)。我想要对称加密。我们可以通过使用单个密钥和XOR函数来简化 加密(现在为 ...我想改进它)。我更担心 格式保存和如何做到这一点。数字

  • 字符串指的0,1,2,3,4,5,6,7,8,9,或 那些连接在一起的任何组合的字符串。

  • 这个问题是指保留格式的加密。 http://en.wikipedia.org/wiki/Format-preserving_encryption

对于那些有兴趣,我目前做如下(我没有这台机器上的代码......我把它更高版本):

  1. 接收用户输入字符串输入。
  2. 将INPUT转换为ulong(UInput)。
  3. 使用简单加密创建密码ulong - > cipherU =(UInput + 1)^ SECRET_KEY
  4. 将cipherU存储在数据库中。

问题是我失去了第1步和第2步之间的前导零。我不想失去这些前导零(例如“00123”在开头有两个零,因为“345123”没有) 。我认为使用只有数字的字符串是保持前导零的最佳方式。

+0

唉唉,不断下降选票,但在评论部分没有问题或建议。对你好。 –

+0

@HenkHolterman你是什么意思分隔符? “integerS”是一个类还是仅包含整数的字符串?字符串长度可以从12-19变化(这个长度可能在将来会改变)。我想要对称加密。我们可以通过使用单个键和异或函数来保持简单的加密(现在...我想改进它)。我更担心格式保存以及如何做到这一点。 –

+0

有没有简单的方法在C#中做到这一点? [是]是否有可能做到这一点?[是]是否有其他选择? [是] –

回答

2

您可以使用AES Crypto Service Provider然后将输出存储为字节数组输出的二进制字符串表示形式。

即12345可能加密成“1001001010110001”

+0

我喜欢这个。有没有简单的方法将字节数组转换为二进制字符串?我需要逐字节地转换还是有一种方法可以一次转换整个事件(在C#API中预先编写的方法)? –

+1

@MohammadS。您可以使用[BitArray](http://msdn.microsoft.com/en-us/library/system.collections.bitarray.aspx)将字节数组转换为位。 – AtinSkrita

+0

@atinskrita:谢谢! –

相关问题