c# - 没有基本情况的递归?这个函数如何终止?
问题描述
我在这个堆栈溢出答案中找到了这段代码,我试图了解这个递归函数是如何终止的。我没有在那个线程上问这个问题的原因是我的问题是关于递归,而不是关于那里讨论的内容(加密)。
/// <summary>
/// Simple Encryption (AES) then Authentication (HMAC) for a UTF8 Message.
/// </summary>
/// <param name="secretMessage">The secret message.</param>
/// <param name="cryptKey">The crypt key.</param>
/// <param name="authKey">The auth key.</param>
/// <param name="nonSecretPayload">(Optional) Non-Secret Payload.</param>
/// <returns>
/// Encrypted Message
/// </returns>
/// <exception cref="System.ArgumentException">Secret Message Required!;secretMessage</exception>
/// <remarks>
/// Adds overhead of (Optional-Payload + BlockSize(16) + Message-Padded-To-Blocksize + HMac-Tag(32)) * 1.33 Base64
/// </remarks>
public static string SimpleEncrypt(string secretMessage, byte[] cryptKey, byte[] authKey,
byte[] nonSecretPayload = null)
{
if (string.IsNullOrEmpty(secretMessage))
throw new ArgumentException("Secret Message Required!", "secretMessage");
var plainText = Encoding.UTF8.GetBytes(secretMessage);
//My question: There's a recursive call here but no base case specified
var cipherText = SimpleEncrypt(plainText, cryptKey, authKey, nonSecretPayload);
return Convert.ToBase64String(cipherText);
}
解决方案
它不是递归的。
var plainText = Encoding.UTF8.GetBytes()
返回一个字节数组,导致SimpleEncrypt(byte[] ...)
文件中的重载进一步被调用。
推荐阅读
- sql - 将结果减少到仅基于单个字段具有超过 1 个唯一行的结果
- java - 使用 Java 14 发布 Gluon 移动应用程序
- sql - oracle sql中的空间数据-两点之间的距离
- spring-boot - 大写时无法获取 xmlelements 的值
- python - 为什么我不能通过 BeautifulSoup 抓取亚马逊产品?
- php - 使用 Blogger API 和 PHP 设置描述、草稿和永久链接
- javascript - Javascript for loop 在计算 LCM 时给出无限循环错误
- javascript - 尝试从两个不同的文本输入中获取值并将它们放在同一个列表项中
- flutter - 将列表保存到 SharedPreferences
- c - 如何找出虚拟机的字长?